我想匹配字符串a
,但我希望我的捕获模式为b
。
要捕获名为a
的{{1}},我可以轻松完成:
id
但是当原始字符串只是(?<id>a)
时,我希望id
为b
。即我希望捕获是不在原始字符串中的字符。
例如,在PHP中它看起来像:
a
答案 0 :(得分:0)
无法获取任何不在输入字符串中的捕获组。捕获组(至少在Perl中)部分表示为原始输入字符串的开始/结束位置。
如果你想让捕获组得到的值在输入字符串中,你可以使用lookarounds来做到这一点。如果您的正则表达式风格具有有限的外观(如PHP),则所需的字符串必须在匹配之后。
例如:
preg_match('/a(?=.*(?<id>b))/', 'a foo b', $matches);
print "matched '$matches[0]', id is '$matches[id]'";
输出:
matched 'a', id is 'b'