0

正規表現を使用する必要があるときはいつでも、正規表現を正しく取得できないようです...

次のような文字列を指定します。

$string = 'text here [download="PDC" type="A"] and the text continues [download="PDS" type="B"] and more text yet again, more shotcodes might exist ...';

「ここにテキスト」の部分を出力し、変数「PDC」と「A」に基づいて mysql クエリを実行し、残りの文字列を出力する必要があります...ストリング)。

これまでのところ、次の正規表現があります

$regex = '/(.*?)[download="(.*?)" type="(.*?)"](.*?)/';
preg_match($regex,$string,$res);
print_r($res);

しかし、これは次のものだけをキャプチャしています。

Array ( [0] => 111111 [1] => 111111 [2] => ) 

preg_match() を使用しています...代わりに preg_match_all() を使用する必要がありますか? とにかく...正規表現は確かに間違っています...助けはありますか?

4

2 に答える 2

2

[キャラクタークラスを開き、]終了します。意味のあるこのような文字は、エスケープするか、PCRE正規表現のQEブロックに入れる必要があります。

/(.*?)\Q[download="\E(.*?)" type="(.*?)"](.*?)/
      ##^          ##         ^-- you were looking for "tipo"
        |
  this character needs to be taken literal, hence the \Q....\E around it
                                                      ##    ##
于 2013-01-06T00:03:07.910 に答える
1

「小さな」もので試してみてください

/(?P<before>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)\[download="(?P<download>[^"]*)" type="(?P<type>[^"]*)"\](?P<after>(?:(?!\[download="[^"]*" type="[^"]*"\]).)*)/

beforeafterdownloadおよびtype一致結果のキーが提供されます。

ここでテストしてください: http://www.regex101.com/r/mF2vN5

于 2013-01-06T00:12:57.830 に答える