如何使用Php正则表达式提取字符串

时间:2018-01-01 11:11:06

标签: php regex

我有像<p>{{name}}</p>这样的字符串 我试过下面的代码:

$subject="<p>{{name}}</p>";
$pattern="/(\[\[|<p>{{)\w+(]]|}}</p>)/";

$success = preg_match($pattern, $subject, $match);
if ($success) {
    $str = substr($match[0], 5,-2);
    echo $str;
} else {
         echo 'not match';
    }  

如何使用正则表达式函数提取name值。

4 个答案:

答案 0 :(得分:2)

如果您要查找<p>代码与双开合花括号{{}}之间的名称,您也可以这样做:

<p>{{\K.+?(?=}}<\/p>)

<强>解释

  • 匹配<p>{{
  • 重置报告的匹配\K
  • 的起点
  • 匹配任何字符一次或多次(这将是您要查找的值)
  • 一个肯定的前瞻(?=}}<\/p>),断言后面的内容是}}</p>

您可以使用preg_match_all查找所有匹配项,或使用preg_match返回第一个匹配项。

Output

您的代码可能如下所示:

$subject="<p>{{name}}</p>";
$pattern="/<p>{{\K.+?(?=}}<\/p>)/";

$success = preg_match($pattern, $subject, $match);
if ($success) {
    $str = substr($match[0], 5,-2);
    echo $str;
} else {
    echo 'not match';
} 

请注意,$str在这种情况下使用substrfalse

答案 1 :(得分:1)

尝试使用具有隔离所需名称的捕获组的模式:

cell.priceLable.textColor = .red

Demo

答案 2 :(得分:1)

无需检查p代码,因为您只需要{{...}}内的文字。如果您想在{{..}}内获取所有价值,请尝试preg_match_all这样

<?php
$subject="<p>name is {{name}} and age is {{age}}</p>";
preg_match_all('#\{\{(.*?)\}\}#', $subject, $match);
print_r($match[1]);
?>

现场演示:https://eval.in/929064

您将在{{...}}

中获得一系列值
Array
(
    [0] => name
    [1] => age
)

答案 3 :(得分:0)

您可以使用strip_tags,然后 preg_replace

$subject="<p>{{name}}</p>";
$pattern="/[^a-zA-Z]/";
$result = preg_replace($pattern, "", strip_tags($subject));
  

输出将为名称