特殊字符之后的正则表达式条件


Regex Condition AFTER a special char

我正在使用php处理正则表达式,但是我有一个问题:

我想做一个条件:如果你遇到"-"字符,下一个字符必须是大写字符。

我做了研究,发现我们可以像这样使用条件:(?(?=正则表达式(then|else(

不幸的是,它不起作用。

这是我目前的正则表达式:

[A-Z][a-z]+[A-Za-z-]*(?(?=[-])[A-Z])

字符串必须符合以下条件:

  • 第一个字母为大写
  • 第二个字母和其他小写字母
  • 接受唯一的特殊字符"-">
  • 如果满足,"-"后面必须跟一个大写字母

目前,使用我的正则表达式,以下结果匹配(但不应该(:

应该匹配的字符串是: 皮拉尔-阿克曼

有人可以帮我吗?

评论更新

PilAr 这样的字符串是匹配的,不应该:(

我不需要在输入字符串中允许多个"-"符号。

如果您只需要处理 ASCII 字母并且最多只能用 - 分隔 2 个块,则可以使用

^[A-Z][a-z]*(?:-[A-Z][a-z]*)?$

查看演示

正则表达式匹配:

  • ^ - 字符串的开头
  • [A-Z][a-z]* - 一个大写的 ASCII 字母,后跟零个或多个小写字母
  • (?:-[A-Z][a-z]*)? - 一个或零(由于?量词(序列...
    • - - 连字符
    • [A-Z][a-z]* - 一个大写的 ASCII 字母,后跟零个或多个小写字母
  • $ - 字符串结尾
您可以使用

此模式:

^[A-Z](?:[a-z]+|-[A-Z])*+$