php 正则表达式前面有char的单词

jexiocij  于 2023-05-05  发布在  PHP
关注(0)|答案(3)|浏览(144)

我只想抓取一个特定的字符串,如果一个特定的单词后面跟着一个=符号。
另外,我想获取=符号之后的所有信息,直到到达/或字符串结束。
让我们举个例子:
somestring.bla/test=123/ohboy/item/item=capture
我想得到item=capture,但不是单独的项目。
我在考虑使用lookaheads,但我不确定这是要走的路。我很感激任何帮助,因为我正试图掌握越来越多的正则表达式。

cwxwcias

cwxwcias1#

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

会给予你所有符合你要求的对子。
从你的例子中,它应该返回:
测试=123
item=捕获

yws3nbqq

yws3nbqq2#

如果你想捕获item=capture,很简单:

/item=[^\/]*/

如果还想提取值,

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

如果你只想匹配这个值,那么你需要使用look-behind

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

编辑:太多的错误,由于失眠。此外,去他的PHP,它没有把字符组中的分隔符当作分隔符。

a8jjtwal

a8jjtwal3#

这是我不久前写的一个函数。我对它做了一些修改,并添加了$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);

相关问题