【问题标题】:Regex Match special characters between two characters正则表达式匹配两个字符之间的特殊字符
【发布时间】:2023-04-10 04:29:01
【问题描述】:

所以我有以下要求:

  1. a-z 或 A-Z 之间的任何字母
  2. 第一个字符必须是字母
  3. 不允许使用数字字符
  4. 除了这三个之外,不允许使用特殊字符:.-'
  5. 它们只能在字母之间

到目前为止,为了解决这个问题,我得到了以下 2 个正则表达式:

^[a-zA-Z][a-zA-Z ]*$

这是为了解决点 1,2,3

(?<=[a-zA-Z])[.\-'](?=[a-zA-Z])

这是解决第 4,5 点

测试用例可以是这样的词:

  • abc(通过)
  • abc(通过)
  • abc'(失败)
  • abc '(失败)

但是我无法将它们结合起来。我已经尝试过,但没有得到预期的结果。有什么想法吗?

【问题讨论】:

  • ^[a-zA-Z]+(?:[-.'][a-zA-Z]+)*$
  • 谢谢!为了快速响应
  • 您的问题是“任何字母”。 [a-zA-Z] 将不匹配重音语言,例如德语。如果您的正则表达式提供支持,最好使用 Unicode 类别 \p{L}(或 \p{Lu}、\p{Ll})。

标签: regex


【解决方案1】:

你可以使用

^[a-zA-Z]+(?:[-.'][a-zA-Z]+)*$

regex demo

详情

  • ^ - 字符串开头
  • [a-zA-Z]+ - 1+ ASCII 字母
  • (?:[-.'][a-zA-Z]+)* - 0 次或多次出现
    • [-.'] - 连字符、点或单引号
    • [a-zA-Z]+ - 1+ ASCII 字母
  • $ - 字符串结束

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2012-07-15
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多