这是一个学术问题,我只是想知道是否有可能捕获一个结果中排除了子字符串的组(例如,使用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
不可能。捕获组只捕获输入字符串的连续子字符串(或者根本不捕获)。