PHP:正则表达式查询 [关闭]

Posted

技术标签:

【中文标题】PHP:正则表达式查询 [关闭]【英文标题】:PHP: Regex inquiry [closed] 【发布时间】:2013-03-10 03:36:09 【问题描述】:

$regex = '/[aeiou]*/'

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

谢谢

【问题讨论】:

好吧,只有一种方法可以找出答案......自己尝试一下。 它将匹配任何字符串。包括空白,没有元音的字符串,数字,任何东西。 【参考方案1】:

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

但它也会匹配空格,因此“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

【讨论】:

【参考方案2】:

既然这里没有认真的回答,我就给个认真的回答吧。

当你通过这个时:

$regex = '/[aeiou]*/'

preg_matchpreg_match_all(或其他一些函数),它将报告任何字符串的匹配。

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

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

要检查字符串是否只包含元音,您需要正则表达式,^ 表示字符串的开头,$ 表示字符串结尾:

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

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

如果你想匹配输入字符串中的一些连续的元音序列(子串),你应该让它至少匹配1个元音:所以我们使用+代替*

$regex = '/[aeiou]+/'

匹配示例:ffffeeeeddiiuo 中的 eeeeiiuoe in red 不匹配示例:nthng 2 s hr 不匹配

希望这对初学者的教程有所帮助。

【讨论】:

【参考方案3】:

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

【讨论】:

mmmmm....肉....午餐时间 @JonathanKuhn tnx! )))我的英语远非好!)))【参考方案4】:

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

【讨论】:

以上是关于PHP:正则表达式查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

站点安全正则表达式处理程序? (PHP) [关闭]

需要在oracle中查询下面的正则表达式[关闭]

正则表达式仅获取php中的第一个字符[关闭]

如何在 php 中使用正则表达式中断查询

PHP正则表达式替换以@结尾以2个空格结尾的单词[关闭]

从字符串正则表达式 PHP 中提取数值 [关闭]