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

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 に答える
1

私はこれを持っています:(の書き方がわかりません\n)が、置換は機能しています。

(\d+|\w|\([^)]++\))説明する必要はありません。最初に数値を取得してから char を取得し、そこに何もない場合は、括弧内の単語全体を取得しようとします。(ネストすることはできません)

于 2013-03-19T09:11:18.983 に答える