我正在尝试匹配某个模式后是否存在任何字符串。 模式是“模式”'介于'[后]之间的任何东西。不区分大小写。
例如
pattern 1 [after] ABC
pattern 2 [after] 123 abc DEX
pattern 3 [after]
pattern 12345123 [after]
pattern @ASd#98 @_90sd [after] xyz dec
[after] 4 pattern
所以我想获得的结果是,
pattern 1 [after] ABC
pattern 2 [after] 123 abc DEX
pattern @ASd#98 @_90sd [after] xyz dec
以“模式”开头,以“[之后]结束,夹在中间的任何东西也被接受。
我很难纳入[]&的分界词。如果字符串一起存在。
我已经尝试过,最接近我最终匹配
m/pattern/ ../ \[after]/
pattern 1 [after] ABC
pattern 2 [after] 123 ABC DEX
pattern 3 [after]
pattern 12345123 [after]
pattern @ASd#98 @_90sd [after] xyz dec
但我不需要第3或第4个模式,因为它在“[after]”之后没有任何数字或字符。
由于
答案 0 :(得分:2)
以下是我用来测试你的输入的代码(我刚刚捕获并通过管道输入脚本)
#!/usr/bin/perl
while(<>)
{
print if (/^pattern.*\[after\]\s*\S+/);
}
所以要为你分解:
/^pattern
:匹配任何以“pattern”
.*\[after\]
:匹配后跟“[after]”的所有字符
\s*\S+
:匹配0个或更多空白字符,后跟一个或多个非空白字符
这应该足以让你在你认为合适时进行调整。
答案 1 :(得分:1)
代码:
$str = 'pattern 2 [after] 123 abc DEX';
if ($str =~ m/^pattern\s+(\d+)\s+\[after\]\s+(.+)/) {
print "$1\t$2\n";
} else {
print "(no match)\n";
}
输出:
2 123 abc DEX
测试此代码here。
答案 2 :(得分:0)
这就是你想要的:
/pattern [0-9] \[after\](?= .)/s
或
/pattern [0-9] \[after\] ./s