3

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

假设我们有示例文本:

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] => 5 [1] => 测试 [2] => 测试)

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

4

3 回答 3

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
)
于 2013-03-19T09:19:46.990 回答
1

我有这个:示例(我不知道如何编写\n),但替换是有效的。

(\d+|\w|\([^)]++\))没有太多解释,首先尝试获取一个数字,然后是一个字符,如果那里没有任何内容,则尝试在括号之间获取一个完整的单词。(它们不能嵌套)

于 2013-03-19T09:11:18.983 回答
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);

\(([^\)]+)\) -->匹配括号之间的所有内容

\d+ -->仅限数字

[a-z] -->仅单个字母

i -->不区分大小写

于 2013-03-19T09:19:59.717 回答