我有一个像这样的字符串列表
$16,500,000(@$2,500)
$34,000(@$11.00)
$214,000(@$18.00)
$12,684,000(@$3,800)
如何从这些字符串中提取所有符号和(@$xxxx)
,以便它们可以像
16500000
34000
214000
12684000
答案 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)
修饰符,以便正则表达式在找到第一个匹配项后不会停止。
以下是该正则表达式的细分:
regex101.com上的\(匹配(字符字面意思为 \ @ 字面上匹配@字符 \ $ 字面上符合$字符 。+ 匹配任何字符1次或更多次
\)按字面意思匹配字符
为了删除所有这些字符:
$,()@。
从字符串中,您可以使用正则表达式:
\$|\,|\(|\)|@|\.
这将匹配上面的所有字符。
上面的|
字符是正则表达式or
运算符,实际上就是这样
$ 或,或(或)或 @ 或。< / strong>将匹配。
接下来,您可以使用preg_replace
替换它,并使用g (global)
修饰符替换它,这样就可以使正则表达式在第一次匹配时不返回:
preg_replace("/\$|\,|\(|\)|@|\./g"), "", $myStringToReplaceWith)
regex101.com上的
所以最后,你的代码看起来像这样:
$str = preg_replace("/\(\@\$.+\)/g"), "", $str)
$str = preg_replace("/\$|\,|\(|\)|@|\./g"), "", $str)
虽然它不在一个正则表达式中,但它不使用任何look-ahead
或look-behind
(顺便说一下,这两个都不错)。