正则表达式匹配文本与特殊字符

时间:2016-06-23 11:42:46

标签: java regex

我需要一个正则表达式来匹配带有特殊字符-,.+\/&的文本。特殊字符后续不得超过2个,并且特殊字符不能跟空格。更具体地说,我必须涵盖这些案例:

some text/
/some text
some /text

我想出了这个正则表达式:

^[-\/,\.+\&]{0,1}[\p{L}]+[-\/,\.+\&]{0,1}([\s\-']?[-\/,\.+\&]{0,1}[\p{L}]+)([-\/,\.+\&]{0,1})$

它匹配我需要的大多数情况,但未能匹配例如: some te&xt。我们将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用

"^(?!.*(?:[-,.+/&]\\s|[-,.+/&]{2}))[^\\s\\d]+(?:\\s+[^\\s\\d]+)*$"

请参阅regex demo

<强>解释

  • ^ - 字符串开头
  • (?!.*(?:[-,.+/&]\\s|[-,.+/&]{2})) - 如果有一个特殊的字符[-,.+/&]后跟一个空格\s,或者来自[-,.+/&]的<2个连续的特殊字符集< / LI>
  • [^\\s\\d]+ - 除数字和空格以外的1个或多个字符
  • (?:\\s+[^\\s\\d]+)* - 0+序列:
    • \\s+ - 1+空格
    • [^\\s\\d]+ - 除数字和空格以外的1个或多个字符
  • $ - 字符串结尾

答案 1 :(得分:0)

我找到了解决方案:

^[-\/,\.+\&\s]{0,1}([\p{L}][-\/,\.+\&\s]{0,1})+([-\/,\.+\&\s]{0,1}([\p{L}][-\/,\.+\&\s]{0,1})+)([\p{L}][-\/,\.+\&\s]{0,1})([-\/,\.+\&\s]{0,1})$