2011-12-14 24 views
1
$regex = '/(?<=(total:))(\$\d+\.\d+)/'; 
$search = '$1.25 cart total: $24.99 $55.50'; 

preg_match($regex, $search, $price); 

我想从上面的字符串中提取'$ 24.99'。php preg_match积极lookahead不按预期方式工作

当我print_r $ price数组时,它是空白的。根据这个工具:http://regexr.com?2vfm9我的正则表达式应该正常工作。当我使用正则表达式的“(\ $ \ d +。\ d +)”部分运行代码时,数组返回所有价格......所以我知道该部分正在工作。

我是否正确执行了正向预览?任何其他想法?


更新: 我想我可能已经找到了问题:

,我分析有文字“& NBSP;”冒号后。当我将自己的原始文本显示给自己时,它并没有显示出来,而是干扰了正则表达式。我会更新以确认。

+3

我已经试过你代码和它“工作”! `print_r($ price);``给我`Array([0] => $ 24.99 [1] => total:[2] => $ 24.99)` – 2011-12-14 09:54:35

+0

`$ price`不为空,http://codepad.viper -7.com/YQxEDN – xdazz 2011-12-14 09:55:35

+0

对我来说,在我的工作站本地工作正常。我并不真的知道这有什么问题。但是,我注意到另一个主机,我用来测试一些PHP,并不是我的所有正则表达式都可以工作。所以,试着找出是否有正则表达式的选项在PHP – 2011-12-14 09:56:32

回答

0

为了应对&nbsp;你可以使用:

$regex = '/(?<=(total:))[^$]+(\$\d+\.\d+)/'; 
$search = '$1.25 cart total:&nbsp;$24.99 $55.50'; 

preg_match($regex, $search, $price); 
print_r($price);  

输出:

Array 
(
    [0] => &nbsp;$24.99 
    [1] => total: 
    [2] => $24.99 
) 
0

你不需要围绕total:捕获括号,实际上它们在这种情况下甚至是有害的。他们捕获。

尝试没有它们。

顺便说一句,你在这里使用的是一个积极的lookbehind,而不是前瞻,我不明白你为什么使用一个呢?

0

的问题是,你的\不被转义:

$regex = '/(?<=(total:))(\\$\\d+\\.\\d+)/';