如何使用RegEx从字符串中删除特定格式?

时间:2015-02-03 04:21:12

标签: php regex

我有一个像这样的字符串列表

$16,500,000(@$2,500)
$34,000(@$11.00)
$214,000(@$18.00)
$12,684,000(@$3,800) 

如何从这些字符串中提取所有符号和(@$xxxx),以便它们可以像

一样
16500000
34000
214000
12684000

2 个答案:

答案 0 :(得分:1)

\(.*?\)|\$|,

试试这个。empty string。见。演示。

https://regex101.com/r/vD5iH9/42

$re = "/\\(.*?\\)|\\$|,/m";
$str = "\$16,500,000(@\$2,500)\n\$34,000(@\$11.00)\n\$214,000(@\$18.00)\n\$12,684,000(@\$3,800)";
$subst = "";

$result = preg_replace($re, $subst, $str);

答案 1 :(得分:0)

要删除结束(@$xxxx)个字符,可以使用正则表达式:

\(\@\$.+\)

并替换为零:

preg_replace("/\(\@\$.+\)/g"), "", $myStringToReplaceWith)

确保使用g (global)修饰符,以便正则表达式在找到第一个匹配项后不会停止。

以下是该正则表达式的细分:

  

\(匹配(字符字面意思为    \ @ 字面上匹配@字符    \ $ 字面上符合$字符   。+ 匹配任何字符1次或更多次
   \)按字面意思匹配字符

regex101.com上的

Here's a live example


为了删除所有这些字符:

  

$,()@。

从字符串中,您可以使用正则表达式:

\$|\,|\(|\)|@|\.

这将匹配上面的所有字符。

上面的|字符是正则表达式or运算符,实际上就是这样 $ @ 。< / strong>将匹配。

接下来,您可以使用preg_replace替换它,并使用g (global)修饰符替换它,这样就可以使正则表达式在第一次匹配时不返回:

preg_replace("/\$|\,|\(|\)|@|\./g"), "", $myStringToReplaceWith)
regex101.com上的

Here's a live example



所以最后,你的代码看起来像这样:

$str = preg_replace("/\(\@\$.+\)/g"), "", $str)
$str = preg_replace("/\$|\,|\(|\)|@|\./g"), "", $str)

虽然它不在一个正则表达式中,但它不使用任何look-aheadlook-behind(顺便说一下,这两个都不错)。