正则表达式用于过滤不以单词结尾的字符串

时间:2013-09-11 08:48:07

标签: regex perl

我正在尝试编写一个正则表达式,用于过滤掉尚未处理的perforce更改列表描述。

所以字符串“在2013/11/09由abcdm @ abcd_PQRST_UVWXY 更改358618”应该通过 但字符串“在2013/11/09由abcdm更改358618 @ abcd_PQRST_UVWXY *待审* ”不应该。 到目前为止,我已经提出了以下内容。

($token1,$token2,$token3) = ( $string =~ /^Change\s+([0-9]+)\s+(.*)\s(?!\\*pending\\*)/ );

因此,如果模式匹配,我应该能够使用更改列表编号。如果更改列表未决,则不会返回任何令牌。

2 个答案:

答案 0 :(得分:4)

在表达式的末尾使用负面的lookbehind断言:

(?<!\*pending\*)$

答案 1 :(得分:1)

我不会使用正则表达式解决这个问题,因为它是一个昂贵的操作。如果您确定要排除的字符串以待处理结尾,只需使用偏移量检查该字符串的一部分:

$string1 = 'Change 358618 on 2013/11/09 by abcdm@abcd_PQRST_UVWXY *pending*';
$string2 = '*pending*';

$offset = length($string1) - length($string2);

$result = index($string1, $string2, $offset);