带负参数的正则表达式 AND 运算符
regex AND operator with negative arguments
我正在尝试匹配不以 .
或 !
结尾且不以 ."
或 !"
结尾的行,所以它应该匹配两者
say "bye"
say "bye
但不应该匹配:
say "bye.
say "bye!
say "bye."
say "bye!"
我尝试使用正向和负向前瞻,尝试按照 Regex AND operator 中的建议将它们用作 AND,但我无法使其工作,我也不确定它是否适用于前瞻。
确保 bye
不会被 .
或 !
继承,并且对负字符 class 进行正向预测,然后使最后一个 "
可选 ?
量词:
\bsay "bye(?=[^.!])"?
您可以使用
^(?!.*[.!]"?$).*$
注意:- 这也匹配空行,因为我们使用 *
这意味着匹配任何零次或多次,如果你想避免匹配空行,你可以使用 +
量词,这意味着匹配一次或多次
只需使用负面回顾。
这完全符合您的要求:^.*+(?<![.!]"?)$
^
- 行首
.*+
- 任意数量的字符,不放弃回溯
(?<!
+ )
- 前面没有
[.!]
- 点或感叹号
"?
- 可选双引号
$
- 行尾
我正在尝试匹配不以 .
或 !
结尾且不以 ."
或 !"
结尾的行,所以它应该匹配两者
say "bye"
say "bye
但不应该匹配:
say "bye.
say "bye!
say "bye."
say "bye!"
我尝试使用正向和负向前瞻,尝试按照 Regex AND operator 中的建议将它们用作 AND,但我无法使其工作,我也不确定它是否适用于前瞻。
确保 bye
不会被 .
或 !
继承,并且对负字符 class 进行正向预测,然后使最后一个 "
可选 ?
量词:
\bsay "bye(?=[^.!])"?
您可以使用
^(?!.*[.!]"?$).*$
注意:- 这也匹配空行,因为我们使用 *
这意味着匹配任何零次或多次,如果你想避免匹配空行,你可以使用 +
量词,这意味着匹配一次或多次
只需使用负面回顾。
这完全符合您的要求:^.*+(?<![.!]"?)$
^
- 行首
.*+
- 任意数量的字符,不放弃回溯
(?<!
+ )
- 前面没有
[.!]
- 点或感叹号
"?
- 可选双引号
$
- 行尾