我想要一个 php 中的正则表达式,它匹配以下语句:{{User:JYBot/count|700,000}}
commnet:只有数字 700,000 是可变的,其他是固定的。
我写了这个:'/\{\{User:JYBot/count\|\d{1,10}\}\}/'
但它不能正常工作,因为它的存在。/
这个正则表达式也不能正常工作:'/\{\{User:JYBot\/count\|\d{1,10}\}\}/'
请帮帮我。问候
一些小方法。拿起你的绳子:
{{User:JYBot/count|700,000}}
将应逐字匹配的部分括入\Q...\E
:
\Q{{User:JYBot/count|\E ... \Q}}\E
现在700,000
用它的模式替换动态部分,例如[\d,]{1,10}
:
\Q{{User:JYBot/count|\E[\d,]{1,10}\Q}}\E
添加分隔符(有多个,到目前为止/
,取一个不是()
字符串的一部分或带有括号的东西,如/{}
或[]
),你就完成了:
~\Q{{User:JYBot/count|\E[\d,]{1,10}\Q}}\E~
尝试以下操作:
/\{{2}User:JYBot\/count\|([0-9\,]+)\}{2}/is
但是,您将获得数字中的逗号,因此您需要将其 str_replace 替换掉。
这应该有效,假设数字用逗号分隔:
/\{\{User:JYBot\/count\|\d{1,3}(?:,\d{3})*\}\}/
您要么需要转义斜杠,要么使用不同的分隔符:
转义斜线:
'/\{\{User:JYBot\/count\|\d{1,10}\}\}/'
不同的分隔符:
'~\{\{User:JYBot/count\|\d{1,10}\}\}~'
您需要/
从正则表达式解析器中转义,这意味着解析器需要\
在它之前看到 a。但是,PHP 字符串表达式"\/"
的计算结果为"/"
——您从 PHP 的字符串文字解析器中转义了正斜杠,因此该\
字符最终不会成为最终字符串的一部分。
为了获得\
字符串中的实际值,请使用其中两个:
'/\{\{User:JYBot\\/count\|\d{1,10}\}\}/'
然后正则表达式解析器将看到\/
您想要的序列。