这是某种学术问题,我只是想知道是否有可能捕获一个组(使用PHP preg_match()函数),并在结果中排除子串。我有兴趣在正则表达式级别上实现这一点。让我解释一下,我在说什么。
F.e。,我有源字符串,如:
...
... needed_NUMERIC_substr_1 not_needed_ALPHA_substr need_NUMERIC_substr2 ...
...
是否可以编写将返回的正则表达式:
Array
(
[0] => %**NOT_IMPORTANT_THAT_WILL_BE_HERE**%
[1] => needed_NUMERIC_substr_1 need_NUMERIC_substr2
)
我理解,可以将所需的字符串分别与不同的捕获组匹配,然后在代码中执行任何所需的操作。这只是学术兴趣。
我考虑过使用条件子模式或 lookahead 和 lookbehind 零宽度断言,但无法找到解决方案。如果有可能,如何实现?
答案 0 :(得分:1)
不,这是不可能的。
preg_match
没有提供任何选项如何将匹配的组连接在一起或删除(用空字符串替换)匹配文本的一部分。
答案 1 :(得分:1)
由于问题实际上似乎是如何从输入字符串123456
获取123abc456
,我不会使用preg_match
。相反,我会使用preg_replace
并用空字符串替换不是数字的所有内容,因此它们会被有效删除。
$string = '123abc456';
$result = preg_replace('/[^0-9]/', '', $string);
echo $result; // prints 123456
答案 2 :(得分:1)
不可能。捕获组捕获仅继续输入字符串的子串(或根本没有)。