我在这里转来转去。我有这个字符串:
document.write('£222,648.43');
我想使用php/regexp来完成222,648.43
这是迄今为止我得到的最接近的:
preg_match('/'(''(.*)''')/', $str, $matches);
var_dump($matches);
vardump给我的:
array (size=2)
0 => string '('£222,648.43')' (length=15)
1 => string '£222,648.43' (length=11)
所以。。如何去掉那个"英镑"的炭?
此外,作为帮助我了解更多regexp的奖励,为什么会返回2个匹配项?
谢谢!
返回的第一个匹配项将是整个正则表达式上的匹配项。第二个将是括号中的第一个捕获组。
如果你想去掉开头引号后的第一个字符,你可以使用.
,就在括号中的捕获部分之前,来匹配任何字符:
'/'(''.(.*)''')/'
如果您只需要在"£"字符的情况下消除它,则可以在进入捕获组之前添加£?
,以选择性地匹配符号:
'/'(''£?(.*)''')/'
如果您需要消除其他可能的货币符号,可以将它们包含在像[£$€¥₪₩₤﷼]
这样的字符类中,例如:
'/'(''[£$€¥₪₩₤﷼]?(.*)''')/'
why are 2 matches returned?
因为一个来自捕获的组( )
,另一个用于与字符串匹配的整个模式。
使用preg_replace
$content = preg_replace("/document'.write'(''D?(['d.,]+)'');/", "$1", $content);
在这里,它将数字抓取到组$1
中,并用这个捕获替换整个字符串。
或者你也可以使用这个:
$content = preg_replace("/.*'(''D?(['d.,]+)'.*/", "$1", $content);
您可以使用:
$str = "document.write('£222,648.43');";
echo preg_replace_callback("~^.*?'( *'([^']+)' *').*?$~", function($m) {
return preg_replace('~[^'d,.]+~', '', $m[1]);
}, $str);
//=> 222,648.43
这里有一种相反的方法:
$string = "document.write('£222,648.43');";
$value = preg_replace("/[.,]*[^'d,.]+[.,]*/", "", $string);