如何在 PHP 中搜索多个字符串的文本
How to search text for multiple strings in PHP
我有一个文本字符串如下:
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae magna vel neque tincidunt.";
add_filter('hello_text', 'sample');
add_filter('goodbye_text', 'sample');
我需要在字符串中搜索 "add_filter('***'"
并获取 *** 文本。如果字符串包含多个不同的***字符串,我也需要获取它们并将它们保存到一个数组中。
所以上面的 $input
字符串会生成:array('hello_text','goodbye_text')
我想我可以使用 stripos ()
,但我不确定如何找到这种文本模式,因为每次 *** 文本都会不同。
<?php
function find_filters($string)
{
if (!preg_match_all("|add_filter\('([a-z0-9_]+)'|ui", $string, $matches)) {
return [];
}
return array_unique($matches[1]);
}
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit add_filter('hellotext', 'sample'). Sed vitae magna add_filter('goodbye_text', 'sample') vel neque tincidunt.";
$result = find_filters($input);
var_dump($result);
这是基于 dekameron 的回答,但使正则表达式更通用。
<?php
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit add_filter('hello_text', 'sample'). Sed vitae magna add_filter('goodbye_text', 'sample') vel neque tincidunt.";
preg_match_all( "/add_filter\s*?\(\s*?'(.+?)'/ui", $input, $matches );
print_r($matches[1]);
挂钩名称不仅限于字母、数字、下划线等基本字符(高级自定义字段是一个在挂钩名称中使用正斜杠的插件)。此正则表达式将处理通用挂钩名称(但是,它不会处理转义的单引号)。此外,这将处理“add_function”、左括号和钩子参数之间的间距发生变化的情况。
我有一个文本字符串如下:
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae magna vel neque tincidunt.";
add_filter('hello_text', 'sample');
add_filter('goodbye_text', 'sample');
我需要在字符串中搜索 "add_filter('***'"
并获取 *** 文本。如果字符串包含多个不同的***字符串,我也需要获取它们并将它们保存到一个数组中。
所以上面的 $input
字符串会生成:array('hello_text','goodbye_text')
我想我可以使用 stripos ()
,但我不确定如何找到这种文本模式,因为每次 *** 文本都会不同。
<?php
function find_filters($string)
{
if (!preg_match_all("|add_filter\('([a-z0-9_]+)'|ui", $string, $matches)) {
return [];
}
return array_unique($matches[1]);
}
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit add_filter('hellotext', 'sample'). Sed vitae magna add_filter('goodbye_text', 'sample') vel neque tincidunt.";
$result = find_filters($input);
var_dump($result);
这是基于 dekameron 的回答,但使正则表达式更通用。
<?php
$input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit add_filter('hello_text', 'sample'). Sed vitae magna add_filter('goodbye_text', 'sample') vel neque tincidunt.";
preg_match_all( "/add_filter\s*?\(\s*?'(.+?)'/ui", $input, $matches );
print_r($matches[1]);
挂钩名称不仅限于字母、数字、下划线等基本字符(高级自定义字段是一个在挂钩名称中使用正斜杠的插件)。此正则表达式将处理通用挂钩名称(但是,它不会处理转义的单引号)。此外,这将处理“add_function”、左括号和钩子参数之间的间距发生变化的情况。