如何在regexp中的特定位置验证特殊字符

时间:2018-04-17 06:15:50

标签: regex

我写了正则表达式 @"^([a-zA-Z ]+[a-zA-Z0-9 ]*)$"它允许除了特殊字符和第一个字符之外的所有字符和数字都不能是数字。现在我必须允许'-'字符除了最后一个字符以外的任何地方。我该如何修改呢。

2 个答案:

答案 0 :(得分:1)

您可以在第二个字符类中添加-并添加negative lookahead (?!,以确保该字符串不会以-结尾。

^(?!.*-$)([a-zA-Z ]+[a-zA-Z0-9 -]*)$

<强>解释

  • ^在行首处断言位置
  • (?!.*-$)否定前瞻以断言字符串不以-结尾
  • (捕获小组
    • [a-zA-Z ]+匹配字符类一次或多次
    • [a-zA-Z0-9 -]*将字符类与-零次或多次匹配
  • )关闭捕获组
  • $断言行尾的位置

注意

您的正则表达式位于捕获组内。如果您不使用该组,则可能会遗漏括号: ^(?!.*-$)[a-zA-Z ]+[a-zA-Z0-9 -]*$

答案 1 :(得分:1)

您可以使用:

@"^([a-zA-Z ]+[a-zA-Z0-9\- ]*[a-zA-Z0-9 ]+)$"
  • 第一组仅允许字母(至少一个)
  • 第二组允许任何字符(包括在内)
  • 最后一组只允许使用字母和数字(至少一个 排除任何其他角色)

您可以对其进行测试here