示例1:f
示例2:ipfs add hello
我只想在示例1中捕获"hello this is me. KEYWORD: blah"
,而不是2,因为在2中,它以"KEYWORD: apple"
KEYWORD
上面的代码捕获了两个示例。如何更改正则表达式,以便它只捕获示例1中的KEYWORD
?
PS最终我希望示例1为if ($line =~/KEYWORD:/x) {
# do something
}
答案 0 :(得分:4)
如果您只是在寻找关键字,那么您应该使用index
而不是正则表达式:
if (index($line, 'KEYWORD') > 0) {
# do something
}
如果在index STR, SUBSTR
中找不到-1
,请the documentation SUBSTR
返回STR
,否则返回SUBSTR
的索引在STR
中(从0开始)。
如果你想寻找一个比简单关键字更复杂的模式,那么你应该按照@Perl Dog的回答说。
答案 1 :(得分:3)
您正在寻找一个 negative lookbehind assertion ,即对于不的'KEYWORD',在某个字符串之前(在您的情况下是开始 - 行标记 ID Name Team Before after Loss
1 1011 David red 125 112 13
2 1024 Alice red 145 135 10
3 1036 Alan yellow 180 156 24
4 1039 Ashley red 145 130 15
5 1019 Diana yellow 128 109 19
):
^
输出:
if ($line =~/(?<!^)KEYWORD:/x) {
# found KEYWORD in '$line', but not at the beginning
print $line, "\n";
}
更新:如评论中所述,hello this is me. KEYWORD: blah
修饰符在我的第一个正则表达式中不是必需的,但可用于使模式更具可读性。它允许模式中的空格(包括换行符)和/或注释来提高可读性。缺点是实际模式中的每个空格/空格字符都必须被转义(以区别于注释),但我们这里没有这些。因此可以如下重写该模式(结果是相同的):
/x
答案 2 :(得分:3)
答案其实很简单!
/.KEYWORD/ # Not at the start of a line
/.KEYWORD/s # Not at the start of the string
顺便说一句,您可能希望在\b
之前添加KEYWORD
以避免匹配NOTTHEKEYWORD
。
答案 3 :(得分:1)
我认为你需要提供更好的,真实的例子
从表面上看,你需要的只是
if ( /KEYWORD/ and not /^KEYWORD/ ) {
...
}
答案 4 :(得分:1)
另一个简单的正则表达式
print if /^.+KEYWORD/;
匹配
hello this is me. KEYWORD: blah