根据PHP手册“ 如果提供了matches
,则将其填充搜索结果。$matches[0]
将包含与完整模式$matches[1]
匹配的文本将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。“
如何仅知道前几个字符就从字符串返回值?
该字符串是动态的,将始终更改内部内容,但前四个字符将始终相同。
例如,如何从字符串“ TmpsCar”返回“ Car”。该字符串将始终带有“ Tmps”,后跟其他内容。
据我了解,我可以使用类似的方法返回
preg_match('/(Tmps+)/', $fieldName, $matches);
echo($matches[1]);
应返回“汽车”。
答案 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
}