我正在使用包含参数的字符串,并用preg_match在PHP中用一些特殊字符分隔
一个例子可能像这样,有四个参数。
1stparm?#?1111?@?2ndParm?#?2222?@?3rdParm?#?3333?@?4thparm?#?444?@?
每个参数名称后跟?#?,它的值在它旁边,以?@结尾。 (注意:值可以是字符串或数字,甚至可以是特殊字符)
我可能使我的正则表达式复杂化,在某些情况下可以使用,但是如果我搜索字符串中的最后一个参数,则不行。
此示例返回2222作为2ndParm的正确值(在组1中)
(?:.*)2ndParm\?#\?(.*?)\?@\?(?=.)(.*)
但是如果2ndParm是字符串中的最后一个,则失败,如以下示例所示:
1stparm?#?1111?@?2ndParm?#?2222?@?
我也很乐意帮助我将结果归还给一个小组。我还没有做到这一点,但是由于我总是得到我对小组1感兴趣的那个,所以无论如何我都可以轻松得到它。
您可以使用
(?P<key>.+?)
\Q?#?\E
(?P<value>.+?)
\Q?@?\E
在verbose
模式下,请参阅a demo on regex101.com。
\Q...\E
构造禁用?
和#
“超能力”(无需在此处进行转义)。PHP
中,可能是<?php
$string = "1stparm?#?1111?@?2ndParm?#?2222?@?3rdParm?#?3333?@?4thparm?#?444?@?";
$regex = "~(?P<key>.+?)\Q?#?\E(?P<value>.+?)\Q?@?\E~";
preg_match_all($regex, $string, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
echo $match["key"] . " = " . $match["value"] . "\n";
}
?>
哪个产量
1stparm = 1111
2ndParm = 2222
3rdParm = 3333
4thparm = 444