【问题标题】:Regex pattern matching for contains a character正则表达式模式匹配包含一个字符
【发布时间】:2019-09-19 09:51:12
【问题描述】:

我正在寻找可以完全做到这一点的正则表达式模式。

  1. 应匹配长度为 12 个字符的 alphaNumeric
  2. 还应检查是否出现连字符 - 在单词中出现两次
  3. 不允许有空格。

我尝试了以下正则表达式:

^([a-zA-Z0-9]*-[a-zA-Z0-9]*){2}$

一些样例

-1234abcd-ab

abcd12-avc-a

-abcd-abcdacb

ac12-acdsde-

正则表达式应与上述所有内容匹配。

下面的应该是错误的

-abcd-abcd--a

abcd-abcdefg

我一直在使用这个正则表达式 ^([a-zA-Z0-9]*-[a-zA-Z0-9]*){2}$ 来匹配上述模式,但问题是,它没有 12 的长度检查。我不确定如何将其添加到上述模式中。帮助将不胜感激。

【问题讨论】:

  • 请发布您目前尝试过的模式。
  • 我尝试了许多不起作用的正则表达式。我已经通过 regexr 并尝试了我知道的所有组合。但是没有用。 @CodeManiac
  • 你能把它们贴出来,将帮助我们准确回答你所缺少的内容,同时也帮助你学习
  • ^([a-zA-Z0-9]*-[a-zA-Z0-9]*){2}$ 这可用于查找带有双连字符的模式,但我'不知道如何找到总长度限制为 12 @CodeManiac
  • 你可以用任何语言做的最简单的事情是检查字符串的长度,str.length <= 12,如果你想使用正则表达式,你可以使用积极的前瞻(我不建议只用于长度限制),即(?=^.{12}$)

标签: regex


【解决方案1】:

使用这个:

(?=^.{12}$)(?=^[^-]*-[^-]*-[^-]*$)[a-zA-Z0-9-]+ /gm

第一个正向前瞻断言总长度为 12。 第二个正向前瞻断言恰好存在两个连字符。 Rest 只是匹配字符集中可能出现的字符。

Demo

【讨论】:

  • 谢谢,这有帮助。 \S* 的使用是我一直在寻找的。​​span>
  • @capt.swag:最好使用[^-] 而不是\S,因为正则表达式匹配超过2个连字符demo
  • 您可以使用\w,而不是[^-],因为无论如何该模式只接受[a-zA-Z0-9]。唯一不同的是\w接受_,在后面的[a-zA-Z0-9-]+中整理。或者,您可以使用(?=^[^_]{12}$)\w*-\w*-\w*$,已经在前瞻中整理出_,因此\w 之后只能匹配预期的[a-zA-Z0-9]。第二个^ 锚也是不必要的,因为前瞻确实已经要求它。但把它放在开头可能更清楚,比如^(?=[^_]{12}$)\w*-\w*-\w*$...
猜你喜欢
  • 2017-04-29
  • 2015-04-23
  • 2015-06-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多