【问题标题】:2 vowels in a word using regex使用正则表达式的单词中的 2 个元音
【发布时间】:2018-07-30 10:16:54
【问题描述】:

给我一​​个句子,我必须找出至少包含 2 个元音的单词并打印出来。 有人可以告诉我我所做的是对还是错? preg_match('/[aeiou].*[aeiou]/') 这适用于所有单词吗?

<?php
$line = $_POST["input"];
$array = preg_split("/\s+/", $line);
//our line has been separated into Strings
for($i = 0; $i<sizeof($array); $i++)
{
    if(preg_match('/[aeiou].*[aeiou]/', $array[$i], $matches))
    {
        print($array[$i]." ");
    }
} 
?>

我输入的html文件是:-

<html>
<head>
    <title>My web page</title>
</head>
<body>
    <form action="test.php" method="post">
        Enter the sentence <br><br>
        <input type="text" name="input" ><br><br>
        <input type="submit" value="Submit" >
    </form>
</body>
</html>

【问题讨论】:

标签: php html


【解决方案1】:
$line = $_POST["string"];
        $array = preg_split("/\s+/", $line);
        //our line has been separated into Strings
        for($i = 0; $i<sizeof($array); $i++)
        {
            $num = preg_match_all('/[aeiou]/i', $array[$i], $matches);
            if($num >= 2)
            {
                print($array[$i]." ");
            }
        } 

试试这个。

【讨论】:

    【解决方案2】:

    让我们仔细看看你的正则表达式:

    • [aeiou] 选择小写 a,e,i,o 或 u
    • .* 选择任何字符(据我所知,这是您在正则表达式中可以做的最贪婪的事情)。这将匹配任何输入
    • [aeiou] 再次选择小写元音

    中间的.* 是您总是选择任何单词的原因。

    我不是 100% 确定您想要实现什么。如果它选择一个带有 2 个元音的单词,那么您的正则表达式可能类似于 [aeiou][^ ]*[aeiou]。这会选择一个元音,而不是空格(也许你不是一个更好的单词分隔符,例如制表符、逗号括号等。这又取决于你的用例)和下一个元音。

    希望对你有帮助

    【讨论】:

    • 它正在工作。虽然为什么 '/[aeiou]{2}/' 不起作用?
    • 因为这样会选择两个连续的元音。这是你想要的吗?
    • 不...感谢您的澄清
    猜你喜欢
    • 2013-02-11
    • 2020-06-06
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多