我想匹配字符串a
,但我希望我的捕获模式是b
.
要捕获a
命名,id
我可以很容易地做到:
(?<id>a)
但我想当id
原始b
字符串只是a
. 即我希望捕获的是不在原始字符串中的字符。
例如,在 PHP 中,它看起来像:
preg_match('/your_magic/', 'a', $matches);
print $matches['id'] == 'b'; // true
我想匹配字符串a
,但我希望我的捕获模式是b
.
要捕获a
命名,id
我可以很容易地做到:
(?<id>a)
但我想当id
原始b
字符串只是a
. 即我希望捕获的是不在原始字符串中的字符。
例如,在 PHP 中,它看起来像:
preg_match('/your_magic/', 'a', $matches);
print $matches['id'] == 'b'; // true
无法将任何内容放入不在输入字符串中的捕获组中。捕获组(至少在 Perl 中)部分表示为原始输入字符串的开始/结束位置。
如果您希望捕获组获取的值在输入字符串中,您可以使用环视来做到这一点。如果您的正则表达式风格具有有限的后视能力(如 PHP),则所需的字符串必须在匹配之后。
例如:
preg_match('/a(?=.*(?<id>b))/', 'a foo b', $matches);
print "matched '$matches[0]', id is '$matches[id]'";
输出:
matched 'a', id is 'b'