Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 相邻元音和辅音的正则表达式?_Regex - Fatal编程技术网

Regex 相邻元音和辅音的正则表达式?

Regex 相邻元音和辅音的正则表达式?,regex,Regex,我想写一个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 有没有可能我遗漏了什么,而这实际上可以用一个表达式来完成 /(your first regex)|(you

我想写一个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
有没有可能我遗漏了什么,而这实际上可以用一个表达式来完成

/(your first regex)|(your second regex)/i

如果要捕获结果,请使用[2]而不是[1]——因为有额外的参数。

您可以在PCRE中使用以下选项:

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

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

您需要捕获这3个字母吗?或者简单地测试字符串中是否出现这种情况?
/[a-z](?:([aeiou])([b-df-hj-np-tv-z])|(?2)(?1))/i
@Wiktor great,这很短并且对我有效。我仍然必须使用这两个表达式,在两端放置
[a-z]
,以便匹配“aab”和“baa”。但这更简短,也更容易理解。从这里开始,将这两个表达式结合起来并不是什么大不了的事。