【发布时间】:2016-11-29 09:24:37
【问题描述】:
@matches = ( $filestr =~ /^[0-9]+\. (.+\n)*/mg );
我有一个已读入 filestr 的文件,但由于某种原因,上面的正则表达式应该匹配一行的开头,后跟一个数字、一个点、一个空格,然后是任意数量的行,后跟一个换行符(因此当有一行只有换行符时结束),似乎只是从文件中产生一些单行。
当我做类似的事情时
@matches = ( $filestr =~ /^[0-9]+\. .+\n/mg );
我正确匹配了一行。
当我这样做时
@matches = ( $filestr =~ /^[0-9]+\. .+\n.+\n/mg );
我匹配相同的单行,然后是一些看似无关的行。我的正则表达式有什么问题?
注意:正则表达式在这个正则表达式测试器中工作正常:https://regex101.com/,它在 perl 中不起作用。
例如,在本文中:
1. This should
match
2. This should too
3. This
one
also
正则表达式应该匹配
1. This should
match
和
2. This should too
和
3. This
one
also
【问题讨论】:
-
仅供参考:当换行符起作用时,请考虑使用
\R而不是\n。但是,在这里你最好改变整个方法并逐行阅读,检查每个后续的。 -
感谢您的建议。我刚刚尝试了 \R 但我得到了与 \n 相同的结果。
-
您知道按照您建议的方式逐行检查的好方法吗?看来我基本上是手动拆分正则表达式。首先检查一行是否匹配 ^[0-9]+\。 , 然后检查一行是否与第一行的其余部分和所有后续行匹配 .+\n (直到我得到一行只有一个换行符的行,此时我必须重新启动)。
-
您能否发布匹配正则表达式的示例行
-
我只能建议像
/^[0-9]+\..*?(?:\R{2}|\z)/gsm这样的正则表达式修复