我现在有一个正则表达式来匹配url子路径。^(?!^__.*__$).[a-zA-Z0-9_.-]+$
我只想禁用字符串开头和结尾的2个下划线,因为这是一个保留字符串。应该允许2个以外的任何数量的下划线
例如:
_should_work_
__should_work___
_should_work___
__should_not_work__
现在的问题是,即使我有两个以上的下划线,正则表达式仍然不匹配
___should_work_but_doesnt__________
你可以在这里查看正则表达式:
https://regex101.com/r/H9F1NN/1
3条答案
按热度按时间hk8txs481#
您可以使用
请参见regex demo。
^
-字符串开始(?!_(?!_))
-字符串不应以_
开头,且后面不紧跟另一个_
字符(?!(?:.*[^_])?_$)
-字符串不能以_
结尾,且该字符串前面紧跟着_
以外的字符,或者该字符串不能位于字符串的开头\w+
-一个或多个字母、数字或下划线$
-字符串结束。zzoitvuj2#
你可以这样做
其中,
[^_]+(_[^_]+)*
和[^_].*(?<!_)
都匹配任何不以下划线开头和结尾的字符串。fykwrbwg3#
你可以否定测试,这会让测试更容易:
输出:
正则表达式的解释:
^
--字符串起始处的锚点__[^_]
--应为两个下划线和一个其他字符.*
--任何内容[^_]__
--应为一个非下划线字符和两个下划线$
--管柱末端的锚