对于我的生活,我无法弄清楚如何编写正则表达式来分割它。
假设我们有示例文本:
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;测试 )
我不确定在正则表达式中添加什么来匹配数字和单个字符时的组合。有什么建议吗?
答案 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)
$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; 不区分大小写