-2

我想要一个 php 中的正则表达式,它匹配以下语句:{{User:JYBot/count|700,000}}

commnet:只有数字 700,000 是可变的,其他是固定的。

我写了这个:'/\{\{User:JYBot/count\|\d{1,10}\}\}/'但它不能正常工作,因为它的存在。/这个正则表达式也不能正常工作:'/\{\{User:JYBot\/count\|\d{1,10}\}\}/'

请帮帮我。问候

4

5 回答 5

4

一些小方法。拿起你的绳子:

{{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~
于 2013-04-10T14:13:20.310 回答
2

尝试以下操作:

 /\{{2}User:JYBot\/count\|([0-9\,]+)\}{2}/is

但是,您将获得数字中的逗号,因此您需要将其 str_replace 替换掉。

于 2013-04-10T14:07:31.567 回答
1

这应该有效,假设数字用逗号分隔:

/\{\{User:JYBot\/count\|\d{1,3}(?:,\d{3})*\}\}/
于 2013-04-10T14:07:54.620 回答
0

您要么需要转义斜杠,要么使用不同的分隔符:

转义斜线:

'/\{\{User:JYBot\/count\|\d{1,10}\}\}/'

不同的分隔符:

'~\{\{User:JYBot/count\|\d{1,10}\}\}~'
于 2013-04-10T14:06:42.467 回答
-1

您需要/从正则表达式解析器中转义,这意味着解析器需要\在它之前看到 a。但是,PHP 字符串表达式"\/"的计算结果为"/"——您从 PHP 的字符串文字解析器中转义了正斜杠,因此该\字符最终不会成为最终字符串的一部分。

为了获得\字符串中的实际值,请使用其中两个:

'/\{\{User:JYBot\\/count\|\d{1,10}\}\}/'

然后正则表达式解析器将看到\/您想要的序列。

于 2013-04-10T14:07:14.927 回答