1

この問題の解決策を見つけようとしています。「&M26&M35.45#&TN#&C150,250,10# f54f#」のような文字列があり、「&」と「#」の間にあるすべての一致を含む配列に変換したいと考えています。だから私のシナリオでは、私はしたいと思います

0: M35.45
1: TN
2: C150,250,10

私は正規表現でそれをやろうとしました

$haystack = "&M26&M35.45#&TN#&C150,250,10# f54f#";
if (preg_match_all("/(?<=&).*?(?=#)/s", $haystack, $result))
print_r($result[0]);

しかし、このようにして私は得ます:

0: M26&M35.45
1: TN
2: C150,250,10

ご覧のとおり、最初の一致には必要のない文字が含まれています。そのため、区切り文字間の最短一致を取得しようとしていますが、方法がわかりません。ありがとうございました!

4

1 に答える 1

2

「このキャラクターはいらない」と言うときは、そのキャラクターを選択から除外する必要があります。つまり、[^&]. 結果の正規表現は次のとおりです。

/(?<=&)[^&]*?(?=#)/s

新しい結果は次のとおりです。

Array
(
    [0] => M35.45
    [1] => TN
    [2] => C150,250,10
)
于 2015-07-21T15:37:20.123 に答える