回顾和回顾PRCE

时间:2018-10-09 14:00:46

标签: regex perl regex-lookarounds regex-group

请输入以下示例文本:

  

neco nechcem neco nechcem neco chcem和neco nechcem

我想捕获文本:

  

“ chcem”

(与nechcem相同,但在此示例中,我将其重命名)

我的问题是我有此正则表达式:

(chcem)(?:(?<!neco).)*?y

还有其他写方法吗?因为,当我将此正则表达式用于大文本时,会发生灾难性的回溯吗?

1 个答案:

答案 0 :(得分:0)

您要捕获的单词“ chcem”可以与单词边界\ b一起使用。 检查此Perl解决方案

$ export str="neco nechcem neco nechcem neco chcem y neco nechcem"

$ perl -e 'BEGIN { $x=$ENV{str}; while($x=~/(\bchcem\b)/g) { print "$1\n" } } '
chcem

$ export str="neco nechcem neco nechcem neco chcem y neco nechcem dasd chcem ab"

$ perl -e 'BEGIN { $x=$ENV{str}; while($x=~/(\bchcem\b)/g) { print "$1\n" } } '
chcem
chcem

$