PRCE:捕获组结果时排除子字符串


PRCE: substring exclusion in capturing group result

这是一个学术问题,我只是想知道是否有可能捕获一个结果中排除了子字符串的组(例如,使用PHP preg_match()函数)。我对在regex级别上实现这一点很感兴趣。让我解释一下,我在说什么。

例如,我有一个源字符串,比如:

...   
... needed_NUMERIC_substr_1 not_needed_ALPHA_substr need_NUMERIC_substr2 ...  
...

是否可以编写regexp,它将返回:

Array
(
    [0] => %**NOT_IMPORTANT_THAT_WILL_BE_HERE**%
    [1] => needed_NUMERIC_substr_1 need_NUMERIC_substr2
)

我知道,可以用不同的捕获组分别匹配两个所需的字符串,然后在代码中执行任何所需的操作这只是学术兴趣。

我曾考虑过使用条件子模式前瞻后备零宽度断言,但未能找到解决方案。如果可能,如何实现?

不,这是不可能的。

preg_match没有提供任何选项如何将匹配的组连接在一起或删除(用空字符串替换)部分匹配的文本。

因为问题似乎真的是如何从输入字符串123abc456中获得123456,所以我不会使用preg_match。相反,我会使用preg_replace,并用空字符串替换所有不是数字的内容,这样它们就可以有效地被删除。

$string = '123abc456';
$result = preg_replace('/[^0-9]/', '', $string);
echo $result; // prints 123456

不可能。捕获组只捕获输入字符串的连续子字符串(或者根本不捕获)。