簡體   English   中英

PHP正則表達式首先提取嵌套表達式然后是外部表達式

[英]PHP regular expressions to extract a nested expression first then the outer expression

我遇到了一些代碼問題。

這是代碼

$test ='<number>1<number>2</number>3</number>';

$i=0;
$find[$i]="#<number>(.*)</number>#is";
$replace[$i]="5";

$i++;
$find[$i]="#<number>(.*)</number>#is";
$replace[$i]="$1";


echo htmlentities(preg_replace($find, $replace, $test));

目前,這只顯示結果中的numnber 5。 但我想讓它顯示153有誰知道我做錯了什么? 謝謝

是的,因為.*匹配所有東西(包括標簽),你匹配得太多了。 如果通過阻止正則表達式匹配尖括號來限制正則表達式不匹配標記邊界,則會得到所需的結果:

$test ='<number>1<number>2</number>3</number>';

$i=0;
$find[$i]="%<number>([^<>]*)</number>%is";
$replace[$i]="5";

$i++;
$find[$i]="%<number>([^<>]*)</number>%is";
$replace[$i]="$1";

將第一個替換模式更改為:

$find[$i] = "#<number>\d+<number>(.*)</number>\d+</number>#is";
$s ='<number>1<number>2</number>3</number>'; 
echo preg_replace('#<number>(\d+)<number>\d+</number>(\d+)</number>#', "$1 5 $2", $s);

在這里測試代碼。

暫無
暫無

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

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