特殊字符

时间:2016-02-15 15:31:58

标签: php regex conditional-statements

我正在使用php处理正则表达式,但我遇到了问题:

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

我做了研究,发现我们可以使用这样的条件:(?(?= regex)然后| else)

不幸的是,它没有用。

暂时是我的正则表达式:

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

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

  • 首字母为大写
  • 第二封信和其他人作为LOWERCASES
  • 唯一的特殊角色" - "被接受
  • 如果符合," - "必须遵循一个大写

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

应该匹配的字符串是:Pilar-Ackermam

有人可以帮助我吗?

评论更新

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

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

2 个答案:

答案 0 :(得分:3)

如果你只需要处理ASCII字母,并且只有2个最大块用-分隔,你可以使用

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

请参阅demo

正则表达式匹配:

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

答案 1 :(得分:0)

您可以使用此模式:

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