PCRE正则表达式 - 排除某些情况

时间:2016-04-28 13:14:58

标签: regex pcre

$regex = /(^)(\[(.*)\]) (.*)$/;

Regex采用所有类似的信息:

[Help] John: ...

问题是聊天的消息看起来像这样:

[      ] Tehnical information: ...
[ >Important< ] ...
[ >>>  ] ...
[ <<<  ] ...

所以,我需要排除邮件,其中:

  • 仅限空格和/或符号'>', '<'
  • 只有重要或重要的单词,包含空格和符号'>', '<'

在其他情况下可能存在空格和符号'>', '<',如果有其他字符这样的数字或其他内容,则应该采取此消息。

[General] John: Hi!
[ > BUFF < ] ...
[ >>> 45] ...

2 个答案:

答案 0 :(得分:1)

/^(?!\[[ <>]*(?:Important)?[ <>]*\])(\[(.*)\]) (.*)$/
  • (?!) - 确保
  • 的负面预测
  • \[\] - 方括号内的东西不是
  • [ <>]*(?:Important)?[ <>]* - 只是一个可变数字(*)的空格,<>,其中包含{?}个字词{Important 1}}里面。

答案 1 :(得分:1)

我建议

^(\[(?![ <>]*(?:Important[ <>]*)?])(.*)]) (.*)$

请参阅regex demo

如果内部只有空格,或者(?![ <>]*(?:Important[ <>]*)?])字符前面或后跟任何空格Important<,则>否定前瞻会使您的正则表达式匹配失败以任何顺序。

请注意,在开场[之后立即放置前瞻,如果放在[之前,则会减少多余的回溯。

模式细节:

  • ^ - 字符串开头
  • (\[ - 开始第1组,打开[
  • (?![ <>]*(?:Important[ <>]*)?]) - 如果匹配以下内容,则会导致匹配失败的否定前瞻:
    • [ <>]* - 0个字符:空格,<>
    • (?:Important[ <>]*)? - 1或0个序列
      • Important - 字面意思
      • [ <>]* - 0个字符:空格,<>
    • ] - 关闭]
  • (.*) - 第2组,匹配除换行符以外的0 +个字符
  • ]) - 第1组结束,]匹配结束]
  • (.*) - 第3组,匹配除换行符以外的0 +个字符
  • $ - 字符串结尾
相关问题