preg_match如何返回匹配项?

时间:2018-12-17 14:58:21

标签: php

根据PHP手册“ 如果提供了matches,则将其填充搜索结果。$matches[0]将包含与完整模式$matches[1]匹配的文本将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

如何仅知道前几个字符就从字符串返回值?

该字符串是动态的,将始终更改内部内容,但前四个字符将始终相同。

例如,如何从字符串“ TmpsCar”返回“ Car”。该字符串将始终带有“ Tmps”,后跟其他内容。

据我了解,我可以使用类似的方法返回

preg_match('/(Tmps+)/', $fieldName, $matches);

echo($matches[1]);

应返回“汽车”。

5 个答案:

答案 0 :(得分:4)

您的正则表达式有缺陷。使用这个:

preg_match('/^Tmps(.+)$/', $fieldName, $matches);
echo($matches[1]);

答案 1 :(得分:3)

$matches = []; // Initialize the matches array first
if (preg_match('/^Tmps(.+)/', $fieldName, $matches)) {
    // if the regex matched the input string, echo the first captured group
    echo($matches[1]);
}

请注意,完全不需要正则表达式即可轻松完成此任务(具有更好的性能):请参见startsWith() and endsWith() functions in PHP

答案 2 :(得分:2)

“字符串将始终带有“ Tmps”,后跟其他内容。”

在这种情况下,您不需要正则表达式。

$result = substr($fieldName, 4);

如果前四个字符始终相同,则仅取其后的字符串部分。

答案 3 :(得分:0)

另一种方法是使用explode函数

$fieldName= "TmpsCar";
$matches = explode("Tmps", $fieldName);
if(isset($matches[1])){
    echo $matches[1]; // return "Car"
}

答案 4 :(得分:-1)

鉴于您要查找的文本不仅包含以Tmps开头的字符串,还可以寻找\w+模式,该模式与任何“单词”字符匹配。

这将导致这样的正则表达式:

/Tmps(\w+)/

并且完全在php中

$text = "This TmpsCars is a test";
if (preg_match('/Tmps(\w+)/', $text, $m)) {
    echo "Found:" . $m[1]; // this would return Cars
}