排除组正则表达式

时间:2013-03-28 13:35:19

标签: php regex

我在Stackoverflow中的许多线程中搜索,但我没有找到与我的案例相关的任何内容。

以下是源文本:

<span class="red"><span>70</span><span style="display:none">1</span><span>,89</span> € TTC<br /></span>

我想用正则表达式提取70,89。

所以我试过了:

<span class="red"><span>([0-9]+)(<\/span><span style="display:none">1<\/span><span>)(,[0-9]+)<\/span>

返回一个数组(在PHP中带有preg_match_all),包含3组:

1/70

2 /

</span><span style="display:none">1</span><span>

3 /,89

我想排除第2组并合并1&amp; 3。

所以我也试过了:

<span class="red"><span>([0-9]+)(?:<\/span><span style="display:none">1<\/span><span>)(,[0-9]+)<\/span>

但它返回:

  1. 70
  2. ,89
  3. 如何合并这两个组?

    非常感谢您的回答,我会疯狂地寻找这个正则表达式! :)

    祝你有个美好的一天!

1 个答案:

答案 0 :(得分:0)

只需匹配用普通<span>包裹的数字:

$str = '<span class="red"><span>70</span><span style="display:none">1</span><span>,89</span> € TTC<br /></span>';

if (preg_match_all('#<span>([,\d]+)</span>#', $str, $matches)) {
    echo join('', $matches[1]);
}
// output: 70,89