【问题标题】:RegEx preceded dash [duplicate]正则表达式在破折号之前[重复]
【发布时间】:2014-12-10 04:05:54
【问题描述】:

我想编写一个需要检查以下内容的正则表达式模式:

每个破折号 (-) 字符的前后必须紧跟一个字母或数字;不允许使用连续的破折号。

如何做到这一点?

【问题讨论】:

  • 提供一些有效和无效匹配的例子。

标签: c# regex character


【解决方案1】:
^(?!(?:.*-(?=$|-))|-).*$

试试这个。查看演示。

https://regex101.com/r/aZ6zX0/4

这使用negative lookahead 来确保- 后面没有-$ 并且不以- 开头。

【讨论】:

  • 这个成功验证@-#,显然不是有效输入。
  • @AlexSkalozub 这很容易解决。你可以用任何你想要的替换.*。但是OP没有指定任何东西
【解决方案2】:

我们只知道每个破折号都应该用字母或数字包围,但我们不知道整个字符串是否仅限于字母、数字和破折号。也没有指定字符串是否需要包含破折号。

假设@#$abc-def#% 是一个有效的字符串,我们需要使用类似:

@"^[^-]+?(?:(?<=[\da-z])-(?=[\da-z])[^-]+?)*$"

DEMO

如果只允许字母、数字和破折号,那就更简单了:

@"^[\da-z]+(?:-[\da-z]+)*$"

DEMO

【讨论】:

    【解决方案3】:

    您可以使用下面的简单正则表达式,它使用负前瞻断言。

    ^(?!-|.*-$|.*-[\W_]|.*[\W_]-).*$
    

    DEMO

    .*-[\W_]|.*[\W_]- 否定前瞻断言中的部分可确保 - 前后没有非单词字符或 _ 符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多