如何编写长正则表达式以适合屏幕?
我在 Perl 中有匹配正则表达式。 分布超过一行的匹配句子。
我意识到如果我展开,我必须仅在一行中输入匹配正则表达式 多行失败:
$array_11 =~ m{By Steve (.*), MarketWatch LONDON (.*) -- Shares of Anglo American rallied on Monday morning as (.*) bet that the mining group will reject a (.*)};'
如果我将其写在多行中,它将无法匹配该字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如前所述,您似乎正在寻找 x 修饰符。
该修饰符会忽略正则表达式中的所有空格,并允许注释(以 # 开头)。
就你而言,它有点丑陋,因为你必须替换所有空格
你确实想在正则表达式中通过 [ ]、\s 或 \s+ 进行匹配:
所以事实上我可能会写这样的内容:
最后一条评论:
$array_11
有很强的代码味道,如果它是一个数组,然后使其成为一个数组,而不是几个标量变量。As mentioned previously, it looks like you are looking for the x modifier.
That modifier ignores all whitespaces in the regexp, and allow comments (starting with #).
In your case it's a bit ugly though, because you then have to replace all the spaces that
you do want to match in the regexp by [ ], \s or \s+:
So in fact I would probably write something like this:
A last comment:
$array_11
has a strong code smell, if it's an array, then make it an array, not several scalar variables.您可能正在寻找
/x
修饰符。来自 perldoc perlre:
You may be looking for the
/x
modifier.From perldoc perlre:
所有逃离的空间都非常丑陋且令人分心。 所以,这里有一个替代方案:
注意:我留下了
(.*)
,因为我不知道 OP 想要什么,但请参阅 Axeman 对 米罗德的回答。All the escaped spaces are really ugly and distracting. So, here is an alternative:
NB: I left the
(.*)
in because I did not know what the OP wants, but see Axeman's comment on mirod's answer.