[英]Regular Expression preg_match_all PHP for %variable%
為preg_match_all
尋找正則表達式,它可以檢測封裝在%文本中的變量,如下所示:
Lorem ipsum dolor就座,協約
%variable1%
,請與臨時勞動者和勞動者共同訴訟。 盡量不要抽煙,不要進行任何鍛煉,以免造成經濟損失%variable2%
。 Duis aute irure dolor in reprehenderit in voltate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur燒結靶occaecat cupidatat非proident,必須遵守的過失%variable3%
魁正式開通了deserunt mollit阿尼姆ID EST laborum。
將要檢測的變量封裝在%符號中。 變量可以包括小寫字母(az),數字(0-9)和連字符(-)。 我想在數組中用%符號返回變量的名稱,如下所示,但無法使其匹配。
Array (
[0] => 'variable1',
[1] => 'variable2',
[3] => 'variable3'
}
有什么建議嗎?
像這樣
<?php
$txt='Lorem ipsum dolor sit amet, consectetur adipisicing %variable1%, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip %variable2% ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa %variable3% qui officia deserunt mollit anim id est laborum.';
preg_match_all('/%(.*?)%/', $txt, $matches);
print_r($matches[1]);
OUTPUT :
Array
(
[0] => variable1
[1] => variable2
[2] => variable3
)
<?php
$text = <<<TEXT
Lorem ipsum dolor sit amet, consectetur adipisicing %variable1%, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip %variable2% ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa %variable3% qui officia deserunt mollit anim id est laborum.
TEXT;
preg_match_all('/%(?P<variables>.*?)%/', $text, $matches);
print_r($matches['variables']);
將輸出:
Array
(
[0] => variable1
[1] => variable2
[2] => variable3
)
function process ($text, array $variables) {
preg_match_all('/(?P<variables>%(.*?)%)/', $text, $matches, PREG_OFFSET_CAPTURE);
if (isset($matches['variables'])) {
foreach (array_column($matches['variables'], 0, 1) AS $offset => $var) {
$value = isset($variables[$var]) ? $variables[$var] : NULL;
$text = substr_replace($text, $value, $offset, strlen($var));
}
return $text;
}
// whoopz!
return NULL;
}
使用它(PHP 5.4+) echo process($text, ['%variable1%' => 'hello']);
服務器版本小於5.4? 您可以從https://github.com/ramsey/array_column下載array_column函數。
如果問我這不是一個好主意,因為您可能最終會在25%和35%之類的值之間出現“變量”。 現在,如果您假設變量名不能以空格開頭,甚至更好,只能以字母開頭,那么您可以使用如下代碼:
'/%([a-zA-Z][a-zA-Z0-9_]*?)%/'
作為正則表達式。
使用“。” 就像別人提到的那樣會惹上你的麻煩。
請注意,如果您想用其他內容替換變量,也有一個preg_replace_callback()函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.