簡體   English   中英

如何使用Php正則表達式提取字符串

[英]How can I extract string using Php regular expression

我有類似<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值。

如果您要在<p>標記之間以及雙大括號{{}}之間尋找名稱,則也可以這樣:

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

說明

  • 匹配<p>{{
  • 重置報告的比賽的起點\\K
  • 一次或多次匹配任何字符(這是您要查找的值)
  • 肯定的前瞻(?=}}<\\/p>)斷言其后是}}</p>

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

產量

您的代碼可能如下所示:

$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';
} 

請注意,在這種情況下,使用substr$strfalse

嘗試將模式與捕獲組一起使用,以隔離所需的名稱:

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

$success = preg_match($pattern, $subject, $match);
if ($success) {
    echo $match[1];
} else {
     echo 'not match';
}

演示

無需檢查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
)

您可以使用strip_tags然后使用preg_replace

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

輸出將是名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM