正则表达式在开始和结束时验证字符,但也在其间发生多次出现

时间:2015-09-30 09:44:50

标签: regex

我需要在开始和结束时阻止一个字符/出现在一个java字符串中,以及//只允许使用字母数字的任何地方。,()?'+ /

我有^[^/]?([\w\-\?:().,'+]/?)*[^/]$

主要问题是它在开始时允许无效字符#和##。

还尝试使用此^[^/]?([^\W_\-\?:().,'+]/?)*[^/]$来删除由\ w

引起的_下划线问题

所以这些都是无效的

/
A//A
A/
#
##

但这些都是有效的

A/A
A/A.,()+A

3 个答案:

答案 0 :(得分:1)

^(?!/)([\w-\?:().,'+]/?)*(?<!/)$

您可以在lookarounds使用0 width assertions。请参阅演示。

https://regex101.com/r/vV1wW6/41

答案 1 :(得分:0)

你也可以试试这个

^[^/#]?([\w\-\?:().,'+]/?)*[^/#]$

如果您明确希望#不包含在开头或结尾,请将其添加到您的第一个和最后一个字符类[]

请参阅演示https://regex101.com/r/vV1wW6/43

答案 2 :(得分:0)

给它一个简单的机会。不需要否定字符类([^X] - “除X之外的任何东西”)或负面外观((?<!X)(?!X) - “无,或不是X”)。你确切地知道字符串中到处允许哪些字符,所以拼写出来:

^[A-Za-z0-9?:().,'+-]+(?:/[A-Za-z0-9?:().,'+-]+)*$

您不需要指定斜杠(/)不能是第一个,只需列出可以的字符。当出现斜杠时,请确保其后至少有一个其他允许的字符。锚点(^$)确保没有任何其他内容。