preg_match($ pattern,$ subject,$ matches),$ matches似乎是所有匹配的数组,我只需要第一次出现的正则表达式模式,我希望匹配在找到后立即停止匹配并将其存储在$ matches中。可能吗?谢谢。
我不是在谈论贪婪的比赛(。*和。*?),一个例子如下,
if (isset($_POST['submit'])) {
$file_reference = $_POST['file_reference'];
$file_name = $_POST['file_name'];
$file_location = $_POST['file_location'];
$file_pdf = $_POST['file_pdf'];
if ($_FILES['file_pdf']['error'] == UPLOAD_ERR_OK)
{
$ext = strtolower(pathinfo($_FILES['file_pdf']['name'],PATHINFO_EXTENSION));
switch ($ext)
{
case'pdf':
break;
default:
throw new InvalidFileTypeException($ext);
}
$targetfolder = "pdf/";
$targetfolder = $targetfolder . basename($_FILES['file_pdf']['name']);
if (move_uploaded_file($_FILES['file_pdf']['tmp_name'], $targetfolder)) {
echo "The file " . basename($_FILES['file_pdf']['name']) . " is uploaded";
} else {
echo "Problem uploading file";
}
$sql = "INSERT INTO file (file_reference,file_name,file_location,file_pdf)
VALUES ('$file_reference','$file_name','$file_location','$file_pdf')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
我希望它只找到abcd而不是任何进一步的匹配,因为进一步的匹配对我来说没用,我认为需要更多的时间来处理。
答案 0 :(得分:4)
我想你想要这样: -
<?php
$str = 'abcd,abed,abfd,abgd';
if(preg_match("/ab.d/",$str ,$matches) !== false){ // check any match found or not
echo "match found:".$matches[0]; // when found print that match
}//after printing execution will stops successfully.
?>
输出: - https://3v4l.org/bErZL
答案 1 :(得分:3)
preg_match
执行您想要的操作 - 在第一次匹配后停止,而不是preg_match_all
,找到所有出现的内容。在您的示例中:
$str = 'abcd,abed,abfd,abgd';
preg_match("/ab.d/", $str, $match);
echo $match[0];//abcd
如果提供了匹配,那么它将填充搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches [1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
答案 2 :(得分:0)
您还可以继续使用T-Regx:
echo pattern('ab.d')->match('abcd,abed,abfd,abgd')->first(); //abcd