【问题标题】:Regex for adjacent vowels and consonants?相邻元音和辅音的正则表达式?
【发布时间】:2020-12-08 02:15:58
【问题描述】:

我想编写一个 PCRE 风格的正则表达式,它可以匹配三个或更多字母的序列,其中元音和辅音相邻。

到目前为止,我需要使用两种模式来说明两个相邻字符的实际位置。

/([aeiou][b-df-hj-np-tv-z]|[b-df-hj-np-tv-z][aeiou])[a-z]/i
/[a-z]([aeiou][b-df-hj-np-tv-z]|[b-df-hj-np-tv-z][aeiou])/i

有没有可能我遗漏了什么,而这实际上可以用一个表达式来完成?

【问题讨论】:

  • 你需要捕获这3个字母吗?或者只是测试字符串中是否出现这种情况?
  • /[a-z](?:([aeiou])([b-df-hj-np-tv-z])|(?2)(?1))/i
  • @Wiktor 太棒了,这更短,对我有用。

标签: regex


【解决方案1】:

您可以在 PCRE 中使用以下内容:

/[a-z](?:([aeiou])([b-df-hj-np-tv-z])|(?2)(?1))/i

在这里,辅音和元音匹配模式被捕获在它们自己的组中,(?1) 和 (?2) 是正则表达式子例程,它们递归相应的组模式而无需重复它们。

【讨论】:

  • 我仍然必须使用这两个表达式,将[a-z] 放在两端,以匹配“aab”和“baa”。但这更短,更容易理解。从这里开始,结合这两个表达式并不是什么大问题。
【解决方案2】:
/(your first regex)|(your second regex)/i

如果您要捕获结果,请使用 [2] 而不是 [1] -- 因为有额外的括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2021-07-29
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多