-8

$regex = '/[aeiou]*/'

会匹配“aeiioauo”还是只匹配“aaaaaaaaaaaa”、“eeeeeee”、“iiiiii”等(集合中只有一个字符的零个或多个)。

谢谢

4

4 回答 4

4

由于这里没有严肃的答案,所以我会给出一个严肃的答案。

当你通过这个:

$regex = '/[aeiou]*/'

preg_matchor preg_match_all(或其他一些函数),它将报告任何 string的匹配项。

preg_match, preg_match_all, preg_replaceand preg_replace_callbackall 默认情况下会找到匹配正则表达式的非重叠 子字符串。(其他语言可能具有断言整个字符串与正则表达式匹配的功能,这是不同的)。

[aeiou]*将匹配任何连续出现的元音(英文)0次或多次。由于正则表达式在根本没有字符(空字符串)时也匹配,并且空字符串可以在任何字符串中的任何位置,因此您总是会得到至少一个匹配项。

要检查字符串是否仅包含 vowels,您需要锚定正则表达式,其中^表示字符串的开头并$表示字符串的结尾:

$regex = '/^[aeiou]*$/'

仅当输入字符串仅包含元音或为空字符串时,上面的正则表达式才会匹配。
匹配示例:aeuuuooiiii, (空字符串), a.
不匹配的示例:aaaaaaaaaab,#@#$

如果要匹配输入字符串中元音的一些连续序列(子字符串),则应使其至少匹配 1 个元音:所以我们+使用*

$regex = '/[aeiou]+/'

匹配示例:eeeeand iiuoin ffffeeeeddiiuo; einred
不匹配示例:不匹配nthng 2 s hr

希望这有助于作为初学者的教程。

于 2013-03-20T20:30:58.993 回答
1

是的,它会的。[]表示任何集合,因此它将满足要求。但是由于您没有其他条件,因此这也将匹配任何其他字符串。

于 2013-03-20T20:15:50.893 回答
0

使用该正则表达式将匹配“aeiioauo”或仅匹配“aaaaaaaaaaaa”、“eeeeee”、“iiiii”

但它也会匹配空格,因此“aaaaeeee iiiiii”将匹配为

Array
(
   [0] => Array
   (
        [0] => aaaaeeee
        [1] => 
        [2] => iiiiii
        [3] => 
        [4] => 
    )

) 

代替

Array
(
    [0] => Array
    (
        [0] => aaaaeeee
        [1] => iiiiii
    )

)

所以我建议将 ' * ' 更改为 ' + '

FROM --> $regex = '/[aeiou]*/';

TO   --> $regex = '/[aeiou]+/';

编辑:这是一个有用的站点,用于在 php 中测试正则表达式

http://www.pagecolumn.com/tool/pregtest.htm

于 2013-03-20T20:41:26.797 回答
0

正则表达式将匹配它可以匹配的所有字符,因为正则表达式默认是贪婪的。顺便说一句:它不仅会匹配 iiiiii 等,还会匹配 aeiio 等。

于 2013-03-20T20:17:29.947 回答