$regex = /(^)(\[(.*)\]) (.*)$/;
Regex采用所有类似的信息:
[Help] John: ...
问题是聊天的消息看起来像这样:
[ ] Tehnical information: ...
[ >Important< ] ...
[ >>> ] ...
[ <<< ] ...
所以,我需要排除邮件,其中:
'>', '<'
'>', '<'
在其他情况下可能存在空格和符号'>', '<'
,如果有其他字符这样的数字或其他内容,则应该采取此消息。
[General] John: Hi!
[ > BUFF < ] ...
[ >>> 45] ...
答案 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 +个字符$
- 字符串结尾