php正则表达式从字符串中提取单个参数值

问题描述 投票:0回答:1

我正在使用包含参数的字符串,并用preg_match在PHP中用一些特殊字符分隔

一个例子可能像这样,有四个参数。

1stparm?#?1111?@?2ndParm?#?2222?@?3rdParm?#?3333?@?4thparm?#?444?@?

每个参数名称后跟?#?,它的值在它旁边,以?@结尾。 (注意:值可以是字符串或数字,甚至可以是特殊字符)

我可能使我的正则表达式复杂化,在某些情况下可以使用,但是如果我搜索字符串中的最后一个参数,则不行。

此示例返回2222作为2ndParm的正确值(在组1中)

(?:.*)2ndParm\?#\?(.*?)\?@\?(?=.)(.*)

但是如果2ndParm是字符串中的最后一个,则失败,如以下示例所示:

1stparm?#?1111?@?2ndParm?#?2222?@?

我也很乐意帮助我将结果归还给一个小组。我还没有做到这一点,但是由于我总是得到我对小组1感兴趣的那个,所以无论如何我都可以轻松得到它。

php regex preg-match
1个回答
0
投票

您可以使用

(?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
© www.soinside.com 2019 - 2024. All rights reserved.