[英]Regular Expression to replace a bracket with word in front when not preceded by word
[英]regular expression word preceded by char
我只想在特定字词后接=
符号时抓取特定字符串。
另外,我想在=
符号之后获取所有信息,直到到达/
或字符串结束。
让我们举个例子:
somestring.bla /测试= 123 / ohboy /产品/产品=捕获
我想获得item=capture
但不想单独获得。
我当时正在考虑使用先行方式,但不确定是否要这样做。 感谢我在尝试越来越多地了解正则表达式方面的帮助。
如果要捕获item=capture
,那么很简单:
/item=[^\/]*/
如果您还想提取值,
/item=([^\/]*)/
如果你只是想匹配的价值,那么你需要后面使用look-。
/(?<=item=)[^\/]*/
编辑:由于失眠过多的错误。 同样,拧紧PHP及其无法忽略字符组中的分隔符作为分隔符的问题。
这是我前一段时间编写的函数。 我对其进行了一些修改,并添加了$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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.