2016-02-25 2 views
0

Я использую this библиотеку с этой строкой текстаЧто делает знак% в preg_match_all?

#asdfasdf #日本語 スペース @漢字 #日本語 あ http://url file:///url「おくむら」最高ー!… 

И это дает мне право значение

#asdfasdf #日本語 

Но в коде есть % в regex

'%(\A#(\w|(\p{L}\p{M}?)|-)+\b)|((?<=\s)#(\w|(\p{L}\p{M}?)|-)+\b)|((?<=\[)#.+?(?=\]))%u' 

Что делает это знак процента?

В iOS он работает без знака процента.

"(\\A#(\\w|(\\p{L}\\p{M}?)|-)+\\b)|((?<=\\s)#(\\w|(\\p{L}\\p{M}?)|-)+\\b)|((?<=\\[)#.+?(?=\\]))" 

В PHP это дает мне сообщение об ошибке: preg_match_all(): Unknown modifier '|'

Что это знак процента делать?

+1

Ничего, это разделитель, чтобы отделить регулярное выражение из дополнительных опций. Они требуются в библиотеке 'preg_ *', см. Http://php.net/manual/en/regexp.reference.delimiters.php – jeroen

+0

* PHP: [синтаксис шаблонов] (http://php.net/manual/ en/reference.pcre.pattern.syntax.php) * ссылки на соответствующую документацию, * Разделители * - вторая точка маркера. –

ответ

0

Ничего, это разделитель, чтобы отделить регулярное выражение от дополнительных параметров. Они требуются в библиотеке preg_*, см. http://php.net/manual/en/regexp.reference.delimiters.php.

Обратите внимание, что если вы не используете % в своем регулярном выражении, в качестве разделителя будет использоваться (...), что приведет к ошибке, когда вам нужно будет использовать их в своем регулярном выражении, и вы не избежите их.

Что происходит здесь, в вашем случае:

(\\A#(\\w|(\\p{L}\\p{M}?)| 
         ^Here the regex engine thinks you are closing the expression 
+1

Спасибо. разделитель это было – matar

Смежные вопросы