PHP Regex Вопрос - PullRequest
       17

PHP Regex Вопрос

1 голос
/ 13 мая 2010

Я разрабатываю приложение с использованием PHP, но я новичок в регулярных выражениях, я не смог найти решение своей проблемы. Я хочу заменить все вхождения #word ссылкой, я написал preg_match для этого:

$text=preg_replace('~#([\p{L}|\p{N}]+)~u', '<a href="/?aranan=$1">#$1</a>', $text);

Проблема в том, что это регулярное выражение также соответствует кодам символов html, таким как

&#039;

и дает искаженный вывод. Мне нужно исключить слова, начинающиеся с & #, но я не знаю, как это сделать с помощью регулярных выражений.

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 13 мая 2010
'~(?<!&)#([\p{L}|\p{N}]+)~u'

Это отрицательный взгляд за утверждением: http://www.php.net/manual/en/regexp.reference.assertions.php

Соответствует # только если не предшествует &

1 голос
/ 13 мая 2010

http://gskinner.com/RegExr/

используйте этот онлайн-конструктор регулярных выражений. У них есть объяснение для каждого флага, который вы можете использовать ... и вы увидите выделенные совпадения в тексте примера.

и да, используйте [a-zA-Z]

0 голосов
/ 13 мая 2010

Вам необходимо добавить правило [A-Za-z] в оператор регулярного выражения, чтобы оно ограничивалось только буквами, а не цифрами.

Я отредактирую с примером позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...