PRCE:捕获组结果中的子串排除

时间:2012-02-05 22:20:59

标签: php regex perl

这是某种学术问题,我只是想知道是否有可能捕获一个组(使用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 零宽度断言,但无法找到解决方案。如果有可能,如何实现?

3 个答案:

答案 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)

不可能。捕获组捕获仅继续输入字符串的子串(或根本没有)。