我正在嘗試檢查tool一行中的確切子字串。我在 reg-ex 下嘗試達到同樣的效果。
my $line = "test git_toolk_test is git";
if ($line =~ m/(\w)*tool(\w)*/){
print "============MATCH=======\n";
}
它與toolk. 但在這種情況下,我只是想匹配確切的字串tool。如果tool我的字串中存在子字串,那么我的if檢查應該命中。
如果我將 $line 分配給諸如 :- hai_git_tool、tool_test_log.
但它也適用于toolk_test_log,hai_git_toolget 這不是預期的值。我在模式數學運算式中遺漏了什么嗎?
我還嘗試匹配其他方式進行if檢查:- [^a-zA-z]tool[^a-zA-Z],當字串以字串開頭/結尾時它不起作用tool
請幫忙!
uj5u.com熱心網友回復:
b你可以使用,
if ( $line =~ /(?:\b|_)tool(?:\b|_)/ )
\b 記錄為
一個這樣的序列是
\b,它匹配某種邊界。\b{wb}還有一些人給出了專門的邊界型別。(它們都從\b{},\b,\B{},\Bin開始詳細描述perlrebackslash。)請注意,這些不匹配字符,而是字符之間的零寬度空格。
請注意,_在\w所以你想匹配一個邊界或一個_.
uj5u.com熱心網友回復:
我只是想匹配確切的字串
tool
從你的例子我假設你想匹配
tool在行首后跟一個非字母字符,或tool在行尾以非字母字符開頭,或tool前面和后面是一個非字母字符
這是一個例子:
use feature qw(say);
use strict;
use warnings;
my @test_cases = ("test git_toolk_test is git",
"hai_git_tool", "a tool_test_log",
"toolk_test_log", "hai_git_toolget",
'${tool-install_dir}/6.4.0-2');
for my $line (@test_cases) {
say "$line";
if ($line =~ m/(?:^|[^a-zA-Z])tool(?:$|[^a-zA-Z])/){
say " --> MATCH";
}
else {
say " --> NO MATCH";
}
}
輸出:
test git_toolk_test is git
--> NO MATCH
hai_git_tool
--> MATCH
a tool_test_log
--> MATCH
toolk_test_log
--> NO MATCH
hai_git_toolget
--> NO MATCH
${tool-install_dir}/6.4.0-2
--> MATCH
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/412286.html
標籤:
