在PHP中使用regex从字符串中搜索和提取

Searching and extracting from a String using regex in PHP

本问题已经有最佳答案,请猛点这里访问。

我在php中有以下字符串:

1
$cars ="Ford Chevrolet Dodge Chrysler";

我需要输出哪些单词具有各种属性,例如:哪个单词以"let"结尾?或者哪个词以"fo"开头?

我不确定如何处理这个问题。我对regex格式非常熟悉,并且我已经得到了preg_匹配来识别匹配项,但这只是1或0中给出的结果。

那么,我应该使用空格作为分隔符来拆分单词,并分别搜索每个单词的匹配项吗?还是有更简单的方法来解决这个问题?

我知道preg_split函数,但我不知道如何实际访问split字符串。

1
2
3
4
5
6
$cars ="Ford Chevrolet Dodge Chrysler";
$param1 = '/(let)+/';
$param2 = '/(fo)+/';

echo preg_match($param1, $cars);
echo preg_match($param2, $cars);

我知道这不起作用,但它会打印1并向我验证两个参数是否匹配。我只是不知道如何分别为参数1和2提取完整的"chevrolet"和"ford"。


我相信您能够理解如何将用户输入插入变量$start$end,以防万一:询问他们是否需要输入字符串在开始或结束时,并根据答案,将字符串保存到$start$end中进行搜索。

1
2
3
4
5
6
7
8
9
10
11
12
$string ="Ford Chevrolet Dodge Chrysler";
$start ="";
$end ="let";

if(!empty($start))
    preg_match_all("#" . $start ."\w+#", $string, $matches);
elseif(!empty($end))
    preg_match_all("#\w+" . $end ."#", $string, $matches);
else
    die("Nothing has been set!");

print_r($matches);

这是对示例字符串中以let结尾的所有单词实现的情况。记住,regex只能匹配单词字符。如果要得到更复杂的字符串,可能需要创建另一个解决方案。

要简单地回显所有匹配项,请使用这样的foreach循环,而不是使用print_r函数:

1
2
3
4
5
6
7
if(!empty($matches))
{
    foreach($matches as $match)
        echo $match ."";
}
else
    die("Nothing matched!");