[英]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.