2

仅当某个单词后跟一个=符号时,我才想获取一个特定的字符串。

另外,我想获取该=符号之后的所有信息,直到/达到 a 或字符串结束。

让我们举个例子:

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

我想得到item=capture但不是单独的项目。

我正在考虑使用前瞻,但我不确定这是要走的路。我很感激任何帮助,因为我正试图越来越多地掌握正则表达式。

4

3 回答 3

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

将为您提供符合您要求的所有配对。

所以从你的例子中它应该返回:

测试=123

项目=捕获

重做演示

于 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 回答