我想创建一个正则表达式,它可以识别一些模式,而不识别一些模式。
_*[a-zA-Z][a-zA-Z0-9_][^-]*.*(?<!_)
我要识别的模式示例:
a100__version_2
_a100__version2
我不想识别的模式样本:
100__version_2
a100__version2_
_100__version_2
a100--version-2
正则表达式对所有这些都有效,除了下面这一个:
a100--version-2
所以我不想用破折号。
我尝试了_*[a-zA-Z][a-zA-Z0-9_][^-]*.*(?<!_)
,因此问题位于[^-]
2条答案
按热度按时间blpfk2vs1#
您可以这样编写模式,但是
[^-]*
也可以匹配换行符和空格。不匹配换行符和空格,并且至少匹配2个字符:
Regex demo
或者仅匹配单词字符,匹配至少重复
\w*
零次或多次的单个字符:^
字符串开头_*
匹配可选下划线[a-zA-Z]
匹配单个字符a-zA-Z\w*
匹配可选单词字符(或[a-zA-Z0-9_]*
)$
字符串结束(?<!_)
在字符串末尾的左侧Assertnot_
Regex demo
qmelpv7a2#
要从正则表达式中排除短划线,可以在[^-]字符类后使用负lookaheadAssert(?!-)。这将确保正则表达式不匹配[^-]字符类后的任何短划线。
下面是排除破折号的正则表达式的更新版本:
[a-zA-Z]a-zA-Z0-9_.*(?〈!)
这个正则表达式应该匹配您想要识别的模式,并排除您不想要识别的模式。
下面是这个正则表达式如何工作的一些示例: