用preg_split分隔一些东西

时间:2013-03-19 08:58:38

标签: php regex

对于我的生活,我无法弄清楚如何编写正则表达式来分割它。

假设我们有示例文本:

15HGH(Whatever)ASD

我想将其分解为以下组(数字,字母本身和括号内容)

15
H
G
H
Whatever
A
S
D

它可以具有上述任意组合,例如:

15HGH
12ABCD
ABCD(Whatever)(test)

到目前为止,我已经将它分解为数字/字母或仅仅是括号部分。例如,在这种情况下:

<?php print_r(preg_split( "/(\(|\))/", "5(Test)(testing)")); ?>

它会给我

阵 (     [0] =&gt;五     [1] =&gt;测试     [2] =&gt;测试 )

我不确定在正则表达式中添加什么来匹配数字和单个字符时的组合。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我不知道preg_match_all是否满足你:

$text = '15HGH(Whatever)ASD';
preg_match_all("/([a-z]+)(?=\))|[0-9]+|([a-z])/i", $text, $out);
echo '<pre>';
print_r($out[0]);

Array
(
    [0] => 15
    [1] => H
    [2] => G
    [3] => H
    [4] => Whatever
    [5] => A
    [6] => S
    [7] => D
)

答案 1 :(得分:1)

我已经得到了这个:Example(我不知道如何写\n)但替换正在发挥作用。

(\d+|\w|\([^)]++\))没有太多的解释,首先尝试得到一个数字,然后是一个字符,如果那里什么也没有,试图在括号之间得到一个完整的单词。 (它们不能嵌套)

答案 2 :(得分:1)

使用preg_match_all()

进行检查
$string = '15HGH(Whatever)(Whatever)ASD';
preg_match_all('/\(([^\)]+)\)|(\d+)|([a-z])/i', $string, $matches);

$results = array_merge(array_filter($matches[1]),array_filter($matches[2]),array_filter($matches[3]));
print_r($results);

\(([^\)]+)\) - &gt; 匹配括号内的所有内容

\d+ - &gt; 仅限数字

[a-z] - &gt; 仅限单个字母

i - &gt; 不区分大小写