我想拿出一个正则表达式匹配不属于价格数字额外的空间。
100 - 应符合
$ 100 - 不应与美元符号 b在正则表达式包括
我试图[^\$]100
但它得到了额外的空间前述100
我想与其他一些字符串来代替数字的话。
“100” 将成为 “!”
这工作得很好,但我想忽略那些开始$ “$ 100”的那些变成“$!” 我不想那样,我想要100美元被忽略。
任何想法?
我想拿出一个正则表达式匹配不属于价格数字额外的空间。
100 - 应符合
$ 100 - 不应与美元符号 b在正则表达式包括
我试图[^\$]100
但它得到了额外的空间前述100
我想与其他一些字符串来代替数字的话。
“100” 将成为 “!”
这工作得很好,但我想忽略那些开始$ “$ 100”的那些变成“$!” 我不想那样,我想要100美元被忽略。
任何想法?
只需尝试找到没有以前缀$
为前缀的数字,并替换那些带有前缀字符的数字,然后在您的示例中使用!
。
$test_string = "This is a number 100 but this isn't \$100.";
$result = preg_replace('/([^\$\d])(\d+)/', '\1!', $test_string);
var_dump($result);
您的查询与我的工作相似 我的预期结果是 “这是一个数字!但这不是100美元。“ 但它变成了 ”这是一个数字!但是这不是100美元“ 我的挣扎是美元符号与\ b的奇怪关系 –
@KarloSerrano你用'preg_replace'测试了它,包括第二个参数吗?在小提琴中它的工作方式是你想要的。 – Jeff
@ Karlo Serrano也许并不是真正的空间,但正如其他人所说的那样,它是有效的:http://ideone.com/3pBley – 2016-12-16 01:39:01
使用负回顾后有一个单词边界:
\s*(?<!\$)\b\d+
替换为!
。请参阅regex demo。
详细:
\s*
- 0+空格(?<!\$)
- 不匹配前面有$
\b
位置 - 领先字边界\d+
- 1+数字(以匹配一个浮点数,也使用\d*\.?\d+
)。$str = 'This is a number 100 but this isn\'t $100.';
$re = '~\s*(?<!\$)\b\d+~';
$subst = '!';
$result = preg_replace($re, $subst, $str);
echo $result;
// => This is a number! but this isn't $100.
不要在regexr.com上测试PHP正则表达式,那个正则表达式测试网站只支持JavaScript正则表达式。Regex101.com是测试PCRE正则表达式的更好选择。 –
所以,基本上你要$ 100的100部分匹配吗? –
不是,我想匹配不以$开头的数字。 –
你想要一个负面的前瞻 – 2016-12-16 01:09:49