2013-04-10 5 views
-2

Я хочу, чтобы регулярное выражение в PHP, который соответствует заявлениям типа: {{User:JYBot/count|700,000}}соответствует регулярному выражению в PHP

CommNet: только номер 700000 является переменным и другими фиксированным.

я это писал: '/\{\{User:JYBot/count\|\d{1,10}\}\}/', но он не работает должным образом, из-за существования / в .Так регулярных выражений тоже не работает должным образом: '/\{\{User:JYBot\/count\|\d{1,10}\}\}/'

Пожалуйста, помогите мне об этом. С уважением

+1

Это не работает, потому что вы также не соглашаетесь с запятой. – Loamhoof

+0

Если все остальное исправлено, почему бы не использовать 'substr'? – andrewsi

ответ

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~ 
+0

Thanks.it очень хорошо. Спасибо за вашу хорошую инструкцию –

0

вам необходимо либо бежать ваши слэш или использовать различные разделители:

выделяющиеся Slashes:

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

различные разделители:

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

Половина пути, набрав в основном то же самое :) – fullybaked

+0

Спасибо. Но это не работает должным образом. –

-1

Вам нужно бежать / из анализатора регулярных выражений, что означает, что перед этим анализатор должен видеть \. Тем не менее, строка PHP expresion "\/" будет оцениваться как "/" - вы избегаете косой черты из строкового литерала синтаксического анализатора PHP, и поэтому символ \ не заканчивается как часть окончательной строки.

Чтобы получить в строке фактическую \, использовать два из них:

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

Регулярное выражение синтаксический анализатор будет увидеть \/ последовательность вы собираетесь.

+0

Спасибо. Но это не работает должным образом. –

+0

@JavadYousefi У вас есть более чем одна проблема, очевидно. Это один из них, но есть и другие. – cdhowie

2

Попробуйте следующее:

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

Вы, однако, получить запятую в количестве, так что вам нужно str_replace его.

+0

Thanks.It работает true –

1

Это должно работать, если число делится запятыми:

/\{\{User:JYBot\/count\|\d{1,3}(?:,\d{3})*\}\}/ 
+0

Thanks.It работает true –