我需要在开始和结束时阻止一个字符/出现在一个java字符串中,以及//只允许使用字母数字的任何地方。,()?'+ /
我有^[^/]?([\w\-\?:().,'+]/?)*[^/]$
主要问题是它在开始时允许无效字符#和##。
还尝试使用此^[^/]?([^\W_\-\?:().,'+]/?)*[^/]$
来删除由\ w
所以这些都是无效的
/
A//A
A/
#
##
但这些都是有效的
A/A
A/A.,()+A
答案 0 :(得分:1)
^(?!/)([\w-\?:().,'+]/?)*(?<!/)$
您可以在lookarounds
使用0 width assertions
。请参阅演示。
答案 1 :(得分:0)
你也可以试试这个
^[^/#]?([\w\-\?:().,'+]/?)*[^/#]$
如果您明确希望#
不包含在开头或结尾,请将其添加到您的第一个和最后一个字符类[]
答案 2 :(得分:0)
给它一个简单的机会。不需要否定字符类([^X]
- “除X之外的任何东西”)或负面外观((?<!X)
,(?!X)
- “无,或不是X”)。你确切地知道字符串中到处允许哪些字符,所以拼写出来:
^[A-Za-z0-9?:().,'+-]+(?:/[A-Za-z0-9?:().,'+-]+)*$
您不需要指定斜杠(/
)不能是第一个,只需列出可以的字符。当出现斜杠时,请确保其后至少有一个其他允许的字符。锚点(^
和$
)确保没有任何其他内容。