我是正则表达式的新手,并且无法弄清楚如何编写模式以匹配我需要的模式。任何帮助都会很棒!
我想使用PHP&正则表达式捕获字符串中的每个字符集,该字符串遵循特定的唯一字符(分隔符),以及在该分隔符的第一个实例之前的任何字符集。然后我想"匹配"所需的输出到PHP数组中。
>
示例字符串:
$str = 'word1 > word-2 > word.3 > word*4';
我想要的比赛:
array([0] => 'word1', [1] => 'word-2', [2] => 'word.3', [3] => 'word*4',);
我已经查看了以下回复,虽然他们很接近,但他们并没有帮助我实现我的需求:
这是我目前正在使用的PHP函数,但它目前只找到分隔符之间的字符:
function parse_conditions($str, $delimiter='>') {
if (preg_match_all('/' . $delimiter . '(.*?)' . $delimiter . '/s', $str, $matches)) {
return $matches[1];
}
注意:给定字符串中的项目数可能会有所不同,因此我无法使用需要特定数量分隔符的模式(例如/^(.*?)>(.*?)>(.*?)>$/
)
答案 0 :(得分:3)
$str = 'word1 > word-2 > word.3 > word*4';
$result = array_map('trim', explode('>', $str));
print_r($result);
输出:
Array
(
[0] => word1
[1] => word-2
[2] => word.3
[3] => word*4
)
答案 1 :(得分:1)
如上所述,您可以使用explode:
$str = 'word1 > word-2 > word.3 > word*4';
print_r(explode(" > " , $str));
但为了完整起见,我们也使用RegEx。
在这种情况下,我们可以告诉正则表达式将所有字符组合在一起,这些字符不是空格而不是分隔符>
:
preg_match_all('/([^>\s]+)/', $str, $matches);
echo print_r($matches[0]);
# [0] => Array
# (
# [0] => word1
# [1] => word-2
# [2] => word.3
# [3] => word*4
# )
答案 2 :(得分:1)
我会使用preg_split,http://php.net/preg_split。
<?php
$matches = preg_split('~\s*>\s*~', 'word1 > word-2 > word.3 > word*4');
print_r($matches);
输出:
Array
(
[0] => word1
[1] => word-2
[2] => word.3
[3] => word*4
)
\s*
表示任意数量的空白字符。
这与使用爆炸类似。
<?php
$matches = explode('>', 'word1 > word-2 > word.3 > word*4');
print_r($matches);
但正如你所看到的爆炸,你有空白:
Array
(
[0] => word1
[1] => word-2
[2] => word.3
[3] => word*4
)