3

こんにちは、文字列を末尾 (右から左) から一致させる必要がありhelloますlast

$game = "hello999hello888hello777last";
preg_match('/hello(\d+)last$/', $game, $match);
print_r($match);

しかし、777 の代わりに、数字とアルファベットの記号が混在しています。たとえば、文字列から取得する必要があるとします。hello999hello888hello0string#@$@#anysymbols%@iwantlast0string#@$@#anysymbols%@iwant

$game = "hello999hello888hello0string#@$@#anysymbols%@iwantlast";
preg_match('/hello(.*?)last$/', $game, $match);
print_r($match);

上記のコードが返されるのはなぜですか999hello888hello0string#@$@#%#$%#$%#$%@iwant。右から左に読み取る正しい手順は何ですか。

注:preg_match_all aswel.forを使用して複数の文字列を一致させたい

$string = 'hello999hello888hello0string#@$@#anysymbols%@iwantlast

hello999hello888hello02ndstring%@iwantlast';

preg_match_all('/.*hello(.*?)last$/', $string, $match);
print_r($match);

返さなければならないもの0string#@$@#anysymbols%@iwant02ndstring%@iwant

4

2 に答える 2

3

次のように正規表現を変更してみてください。

/.*hello(.*?)last$/

説明:

.*     eat everything before the last 'hello' (it's greedy)
hello  eat the last hello
(.*?)  capture the string you want
last   and finally, stop at 'last'
$      anchor to end

最後まで固定している場合は、とにかく?最後が必要なため、これは実際には不要です。のようなものに合わせたい場合は、 をlast削除します。$helloMatch this textlastDon't match this

複数行の場合は、 も削除$します。

于 2013-09-23T12:28:42.710 に答える