2

=特定の単語の後に記号が続く場合にのみ、特定の文字列を取得したいと思います。

=また、その記号の後、a/に到達するか、文字列が終了するまで、すべての情報を取得したいと思います。

例を見てみましょう:

somestring.bla/test=123/ohboy/item/item=capture

item=captureアイテムだけではなく、手に入れたい。

先読みを使用することを考えていましたが、これが正しい方法かどうかはわかりません。正規表現についてますます把握しようとしているので、助けていただければ幸いです。

4

3 に答える 3

3
[^/=]*=[^/]*

要件に一致するすべてのペアが提供されます。

したがって、あなたの例からそれは戻るはずです:

test = 123

item =capture

Refiddleデモ

于 2013-01-25T00:51:57.657 に答える
2

キャプチャしたい場合item=capture、それは簡単です:

/item=[^\/]*/

値も抽出したい場合は、

/item=([^\/]*)/

値のみを一致させたい場合は、ルックビハインドを使用する必要があります

/(?<=item=)[^\/]*/

編集:不眠症によるエラーが多すぎます。また、PHPをねじ込み、文字グループ内のセパレーターをセパレーターとして無視しないようにします。

于 2013-01-25T00:48:11.547 に答える
0

これは私が少し前に書いた関数です。少し変更し、$keys 有効なキーを指定できるように引数を追加しました。

function getKeyValue($string, Array $keys = null) {
    $keys = (empty($keys) ? '[\w\d]+' : implode('|', $keys));
    $pattern = "/(?<=\/|$)(?P<key>{$keys})\s*=\s*(?P<value>.+?)(?=\/|$)/";
    preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);
    foreach ($matches as & $match) {
        foreach ($match as $key => $value) {
            if (is_int($key)) {
                unset($match[$key]);
            }
        }
    }
    return $matches ?: FALSE;
}

文字列と有効なキーを入力するだけです。

$string = 'somestring.bla/test=123/ohboy/item/item=capture';
$keys = array('test', 'item');
$keyValuePairs = getKeyValue($string, $keys);
var_dump($keyValuePairs);
于 2013-01-25T01:17:18.370 に答える