我只想抓取一个特定的字符串,如果一个特定的单词后面跟着一个=符号。另外,我想获取=符号之后的所有信息,直到到达/或字符串结束。让我们举个例子:somestring.bla/test=123/ohboy/item/item=capture我想得到item=capture,但不是单独的项目。我在考虑使用lookaheads,但我不确定这是要走的路。我很感激任何帮助,因为我正试图掌握越来越多的正则表达式。
=
/
item=capture
cwxwcias1#
[^/=]*=[^/]*
会给予你所有符合你要求的对子。从你的例子中,它应该返回:测试=123item=捕获
yws3nbqq2#
如果你想捕获item=capture,很简单:
/item=[^\/]*/
如果还想提取值,
/item=([^\/]*)/
如果你只想匹配这个值,那么你需要使用look-behind。
/(?<=item=)[^\/]*/
编辑:太多的错误,由于失眠。此外,去他的PHP,它没有把字符组中的分隔符当作分隔符。
a8jjtwal3#
这是我不久前写的一个函数。我对它做了一些修改,并添加了$keys参数,以便您可以指定有效的密钥:
$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);
3条答案
按热度按时间cwxwcias1#
会给予你所有符合你要求的对子。
从你的例子中,它应该返回:
测试=123
item=捕获
yws3nbqq2#
如果你想捕获
item=capture
,很简单:如果还想提取值,
如果你只想匹配这个值,那么你需要使用look-behind。
编辑:太多的错误,由于失眠。此外,去他的PHP,它没有把字符组中的分隔符当作分隔符。
a8jjtwal3#
这是我不久前写的一个函数。我对它做了一些修改,并添加了
$keys
参数,以便您可以指定有效的密钥:只需输入字符串和有效的键: