嗨,我正在努力获得正确的模式匹配的正则表达式。正则表达式下划线分隔模式匹配
我基本上想使用正则表达式来匹配以下模式。
[anyCharacters]_[anyCharacters]_[anyCharacters]_[anyCharacters]_[1or2]
例如,下面的字符串应该匹配上面的模式。 AA_B_D_测试adf123_1
我想下面的正则表达式,但不工作.....
^[.]+_[.]+_[.]+_[.]+_(1|2)
嗨,我正在努力获得正确的模式匹配的正则表达式。正则表达式下划线分隔模式匹配
我基本上想使用正则表达式来匹配以下模式。
[anyCharacters]_[anyCharacters]_[anyCharacters]_[anyCharacters]_[1or2]
例如,下面的字符串应该匹配上面的模式。 AA_B_D_测试adf123_1
我想下面的正则表达式,但不工作.....
^[.]+_[.]+_[.]+_[.]+_(1|2)
尝试
^(.+_)+(1|2)$
如果你想指定的出现次数:
^(.+_){4}(1|2)$
使用[^_]
negated character class而不是[.]
,只有匹配的点符号:
^[^_]+_[^_]+_[^_]+_[^_]+_[12]
如果图案必须匹配整个字符串,请添加$
:
^[^_]+_[^_]+_[^_]+_[^_]+_[12]$
此外,您可能有点用limiting quantifier缩短:
^[^_]+(?:_[^_]+){3}_[12]$
请注意,[12]
是匹配单个字符的更好方法,它将匹配1
或2
。在匹配多字符值时,应使用(...)
(或(?:...)
,非捕获变体) 等分组结构。
图案的详细资料:
^
- 3出现的 - 1以上字符比_
(?:_[^_]+){3}
其他 - 串[^_]+
的开始:
_
- 下划线[^_]+
- 1以上字符比_
_
其他 - 下划线[12]
- 1
或2
$
- 字符串的结尾。.
(一次)_
包括
.*
匹配任何字符(最大序列)(_
包括)
[.]+
匹配仅.
字符(至少一个)(最大序列)
[^_]+
匹配除_
(至少一个)(最大序列)以外的任何字符
.*?
可能匹配任何字符(最短的序列)
您可能需要过去的两种之一。
^[^_]+_[^_]+_[^_]+_[^_]+_(1|2)
或
^(.*?_){4}[12]
与.*?
的问题是,它可以走回头路,也符合
one_two_three_four_five_1
最短的是
^([^_]+_){4}[12]
的'AA_B_D_测试adf123_1'样本串没有'['和']'。 –