1

我想匹配字符串a,但我希望我的捕获模式是b.

要捕获a命名,id我可以很容易地做到:

(?<id>a)

但我想当id原始b字符串只是a. 即我希望捕获的是不在原始字符串中的字符。

例如,在 PHP 中,它看起来像:

preg_match('/your_magic/', 'a', $matches);
print $matches['id'] == 'b'; // true
4

1 回答 1

0

无法将任何内容放入不在输入字符串中的捕获组中。捕获组(至少在 Perl 中)部分表示为原始输入字符串的开始/结束位置。

如果您希望捕获组获取的值在输入字符串中,您可以使用环视来做到这一点。如果您的正则表达式风格具有有限的后视能力(如 PHP),则所需的字符串必须在匹配之后。

例如:

preg_match('/a(?=.*(?<id>b))/', 'a foo b', $matches);
print "matched '$matches[0]', id is '$matches[id]'";

输出:

matched 'a', id is 'b'
于 2013-08-05T23:05:42.143 回答