【发布时间】:2014-11-23 02:27:09
【问题描述】:
我需要在同一行匹配多个模式。例如,在这个文件中:
Hello, Chester [McAllister;Scientist] lives in Boston [Massachusetts;USA;Fenway Park] # McAllister works in USA
I'm now working in New-York [NYC;USA] # I work in USA
...
首先,我想将每个字符串匹配到括号中,因为知道可以有多个模式,而且我们可以在括号中放置 1 到 n 个字符串,括号中总是用分号分隔.
最后,对于每一行,我需要将值与位于# 之后的字符串进行比较。比如第一句话,我想比较一下:
[McAllister;Scientist] & [Massachusetts;USA;Fenway Park] TO "McAllister works in USA"
【问题讨论】:
-
你的意思是这个
\[[^;\n]*(?:;[^;\n]*)+\]regex101.com/r/uT5cC0/2' -
你想做什么,把它们放到一个数组中?
-
@AvinashRaj 我试过这个
if($sentence =~ /(\[[^;]*(?:;[^;]*)+\])/g){ print $1."\n"; },但第一行的结果是:[McAllister;Scientist] lives in Boston [Massachusetts;USA;Fenway Park] -
@sln 为什么不呢。最后,我需要将用分号分隔的每个值与字符串进行比较。我编辑答案更清楚。