我想问一下php的preg_match_all。假设我们有以下示例字符串:
这是一个带有 - value1 - 和-_value_2_-的子句,其子条款为 - value.3 - items。
我想用开头的“ - ”和关闭“ - ”字符提取所有字符串。需要的输出应该是:
Array
(
[0] => Array
(
[0] => -_value1_-
[1] => -_value_2_-
[2] => -_value.3_-
)
)
答案 0 :(得分:2)
使用以下简单正则表达式/-.*?-/
或/-.*-/U
U(PCRE_UNGREEDY)这个修饰语颠倒了“贪婪” 量词使他们默认不贪心,但变得贪婪 如果紧接着?它与Perl不兼容。它也可以设置 通过图案内的(?U)修改器设置或问号 量词的后面(例如。*?)。
答案 1 :(得分:0)
您可以使用此代码:
$str="This is a clause with -value1- and -_value_2_- having a subclause of -value.3- items.";
if (preg_match_all('/-[^-]*-/', $str, $m))
print_r($m[0]);
答案 2 :(得分:0)
有时preg_match_all()
可能过于复杂。在这些情况下,您可以使用explode
来实现此目标。
$matches = explode("-", $input);
explode()
做了什么?
$input = "This is a basic example: -JOHN-. The End";
explode()
将$matches
转换为数组。之后,在$input
中搜索“ - ”字符。找到“ - ”后,它将设置如下的数组。
$input[0]
---> “这是一个基本的例子:”
$input[1]
---> “JOHN”
$input[2]
---> “。结束”
explode()
是一种替代方式。但最好的当然是preg_match_all()
答案 3 :(得分:0)
您可以使用T-Regx library自动添加定界符
pattern('-.*?-')->match($string)->all();
结果是
Array
(
[0] => -_value1_-
[1] => -_value_2_-
[2] => -_value.3_-
)