我应该为文件名写一个正则表达式,它允许使用chars
^[a-zA-Z0-9 ()+,._&-]+$
但它不能以点结尾。
我可以把两者放在一起吗?
您可以在开始时使用否定的前瞻:
^(?!.*\.$)[a-zA-Z0-9 ()+,._&-]+$
^^^^^^^
在(?!.*\.$)
输入的开始先行将“触发”,而一旦字面点在字符串的结尾处找到失败的比赛。
另外,您可以使用后面带有负号的其他版本(如果正则表达式引擎支持)。这是一个基于后向解决方案的不良示例,因为它将执行许多不必要的回溯:
^[a-zA-Z0-9 ()+,._&-]+(?<!\.)$
这是一个更好的选择,因为它拥有所有格量词,可以消除不必要的回溯,并且仅在字符串末尾检查句点:
^[a-zA-Z0-9 ()+,._&-]++(?<!\.)$
^^
所有格量词的另一种选择是原子组:
^(?>[a-zA-Z0-9 ()+,._&-]+)(?<!\.)$
^^^ ^
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句