正则表达式 - 如何防止重复的特殊字符?

时间:2017-07-06 18:57:02

标签: java c# regex pcre regular-language

我没有正则表达式的经验。我需要一个不允许重复特殊字符的正则表达式(+ - * /&等) 该字符串可以包含数字,字母数字和特殊字符。

这应该是有效的:abc,df

这应该是无效的:abc-,df

如果你能帮助我,我将非常感激!谢谢你的进步。

3 个答案:

答案 0 :(得分:2)

[\,\+\-\*\/\&]{2,}如果需要,可在方括号中添加更多字符 演示https://regex101.com/r/CBrldL/2

答案 1 :(得分:2)

到目前为止提供的两个解决方案匹配允许的字符串。

但是倾斜是如何防止... ,所以我假设正则表达式 应与允许的字符串匹配。这意味着正则表达式应该:

    如果不包含2,则
  • 匹配整个字符串 连续的特殊字符,
  • 不相称。

您可以将以下部分组合在一起:

  • ^ - 字符串锚的开始,
  • (?!.*[...]{2}) - 连续2次特殊的否定前瞻 字符(此处标记为...),在任何地方,
  • 匹配整个(非空)字符串的正则表达式
  • $ - 字符串锚定结束。

所以整个正则表达式应该是:

^(?!.*[!@#$%^&*()\-_+={}[\]|\\;:'",<.>\/?]{2}).+$

请注意,在char类([]之间)反斜杠 转义以下字符应放在-之前(如果在...中) 序列的中间),关闭方括号, 反斜杠本身和/(正则表达式终止符)。

或者,如果您想将正则表达式应用于单个单词(不是全部 字符串),那么正则表达式应该是:

\b(?!\S*[!@#$%^&*()\-_+={}[\]|\\;:'",<.>\/?]{2})\S+

答案 2 :(得分:0)

使用以下正则表达式匹配无效字符串。

[^A-Za-z0-9]{2,}