除非出现两次,否则如何匹配字符的任何出现?
How to match any occurrence of a character except if it occurs two times?
我正在尝试匹配术语末尾出现的任何加号,除非它恰好出现两次。例如c+
和c++++
中的加号应该匹配,但是c++
中的不是。
天真的方法 \+{1}$|\+{3,}$
显然行不通。你有什么更好的主意吗?
我喜欢在这里构建我的正则表达式:regex builder
看起来这个会抓取 c+,而不是 c++,以及带有 3 个或更多 + 符号的 c
(c\+{1}|(\+){3,})
您可以使用负先行的正则表达式:
\b\+(?:\+{2,})?(?!\+)
正则表达式分解:
\b
- 声明一个字边界
\+
- 匹配文字 +
(?:\+{2,})?
- 可选择匹配 2 个或更多 +
(?!\+)
- 否定前瞻以确保前面没有 +
阻止 ++
^[^+]*(?:\+|[+]{3,})$
将匹配您的人为示例以及您人为示例中 c
位置的任何内容。
我正在尝试匹配术语末尾出现的任何加号,除非它恰好出现两次。例如c+
和c++++
中的加号应该匹配,但是c++
中的不是。
天真的方法 \+{1}$|\+{3,}$
显然行不通。你有什么更好的主意吗?
我喜欢在这里构建我的正则表达式:regex builder 看起来这个会抓取 c+,而不是 c++,以及带有 3 个或更多 + 符号的 c
(c\+{1}|(\+){3,})
您可以使用负先行的正则表达式:
\b\+(?:\+{2,})?(?!\+)
正则表达式分解:
\b
- 声明一个字边界\+
- 匹配文字+
(?:\+{2,})?
- 可选择匹配 2 个或更多+
(?!\+)
- 否定前瞻以确保前面没有+
阻止++
^[^+]*(?:\+|[+]{3,})$
将匹配您的人为示例以及您人为示例中 c
位置的任何内容。