PCRE 正则表达式 - 排除某些情况
PCRE Regex - exclude some cases
$regex = /(^)(\[(.*)\]) (.*)$/;
正则表达式采用如下所示的所有消息:
[Help] John: ...
问题是聊天中有如下所示的消息:
[ ] Tehnical information: ...
[ >Important< ] ...
[ >>> ] ...
[ <<< ] ...
所以,我需要排除消息,其中:
- 只有空格and/or符号
'>', '<'
- 只有单词 Important 或带空格和符号的 Important
'>', '<'
空格和符号 '>', '<'
可以在其他情况下存在,如果有其他字符,例如数字或其他字符,则应采用此消息。
[General] John: Hi!
[ > BUFF < ] ...
[ >>> 45] ...
/^(?!\[[ <>]*(?:Important)?[ <>]*\])(\[(.*)\]) (.*)$/
(?!)
- 否定前瞻以确保
\[\]
- 方括号里面的东西不是
[ <>]*(?:Important)?[ <>]*
- 只是可变数量 (*
) 的空格,<
和 >
以及可选 (?
) 出现的单词Important
里面。
我建议
^(\[(?![ <>]*(?:Important[ <>]*)?])(.*)]) (.*)$
如果里面只有 space,或者如果 Important
之前或之后有任何 space 的话,(?![ <>]*(?:Important[ <>]*)?])
否定前瞻将使您的正则表达式匹配失败, <
或 >
任意顺序。
请注意,先行放置在开口 [
之后,如果放置在 [
.
之前并包含在内,则可以减少冗余回溯
图案详情:
^
- 字符串开头
(\[
- 第 1 组开始,开场 [
(?![ <>]*(?:Important[ <>]*)?])
- 如果匹配以下项,则匹配失败的否定前瞻:
[ <>]*
- 0+ 个字符:space、<
或 >
(?:Important[ <>]*)?
- 1 或 0 个序列
Important
- 文字
[ <>]*
- 0+ 个字符:space、<
或 >
]
- 关闭 ]
(.*)
- 第 2 组,匹配除换行符以外的 0+ 个字符
])
- 第 1 组结束,]
匹配结束 ]
(.*)
- 第 3 组,匹配换行符以外的 0+ 个字符
$
- 字符串结尾
$regex = /(^)(\[(.*)\]) (.*)$/;
正则表达式采用如下所示的所有消息:
[Help] John: ...
问题是聊天中有如下所示的消息:
[ ] Tehnical information: ...
[ >Important< ] ...
[ >>> ] ...
[ <<< ] ...
所以,我需要排除消息,其中:
- 只有空格and/or符号
'>', '<'
- 只有单词 Important 或带空格和符号的 Important
'>', '<'
空格和符号 '>', '<'
可以在其他情况下存在,如果有其他字符,例如数字或其他字符,则应采用此消息。
[General] John: Hi!
[ > BUFF < ] ...
[ >>> 45] ...
/^(?!\[[ <>]*(?:Important)?[ <>]*\])(\[(.*)\]) (.*)$/
(?!)
- 否定前瞻以确保\[\]
- 方括号里面的东西不是[ <>]*(?:Important)?[ <>]*
- 只是可变数量 (*
) 的空格,<
和>
以及可选 (?
) 出现的单词Important
里面。
我建议
^(\[(?![ <>]*(?:Important[ <>]*)?])(.*)]) (.*)$
如果里面只有 space,或者如果 Important
之前或之后有任何 space 的话,(?![ <>]*(?:Important[ <>]*)?])
否定前瞻将使您的正则表达式匹配失败, <
或 >
任意顺序。
请注意,先行放置在开口 [
之后,如果放置在 [
.
图案详情:
^
- 字符串开头(\[
- 第 1 组开始,开场[
(?![ <>]*(?:Important[ <>]*)?])
- 如果匹配以下项,则匹配失败的否定前瞻:[ <>]*
- 0+ 个字符:space、<
或>
(?:Important[ <>]*)?
- 1 或 0 个序列Important
- 文字[ <>]*
- 0+ 个字符:space、<
或>
]
- 关闭]
(.*)
- 第 2 组,匹配除换行符以外的 0+ 个字符])
- 第 1 组结束,]
匹配结束]
(.*)
- 第 3 组,匹配换行符以外的 0+ 个字符$
- 字符串结尾