【问题标题】:Regex to match a text with special chars in it正则表达式匹配带有特殊字符的文本
【发布时间】:2016-06-23 11:42:45
【问题描述】:

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

some text/
/some text
some /text

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

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

它匹配我需要但无法匹配的大多数情况,例如: some te&xt。每一个帮助将不胜感激。谢谢。

【问题讨论】:

标签: java regex


【解决方案1】:

你可以使用

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

regex demo

说明

  • ^ - 字符串开头
  • (?!.*(?:[-,.+/&]\\s|[-,.+/&]{2})) - 如果有一个特殊字符 [-,.+/&] 后跟一个空格 \s 或来自 [-,.+/&] 集合的 2 个连续特殊字符,则否定前瞻将失败
  • [^\\s\\d]+ - 1 个或多个字符,而不是数字和空格
  • (?:\\s+[^\\s\\d]+)* - 0+ 个序列:
    • \\s+ - 1+ 个空格
    • [^\\s\\d]+ - 1 个或多个字符,而不是数字和空格
  • $ - 字符串结束

【讨论】:

    【解决方案2】:

    我找到了解决办法:

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

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多