PHP @упоминание с использованием регулярного выражения

#php #regex

#php #регулярное выражение

Вопрос:

Я использую регулярное выражение для преобразования @user name в ссылки. Например, если пользователь вводит @Alex Ferguson, он должен преобразовать Alex Ferguson в гиперссылку. Здесь это преобразование имени в гиперссылку и исключение фамилии.Он ищет слово ближе к @, если между именем и фамилией нет пробела, оно работает нормально. Есть ли какой-либо способ преобразовать имя и фамилию в гиперссылку.

Вот мой код:

  function convert($msg){
 $message = preg_replace(array('/(?i)b((?:https?://|wwwd{0,3}[.]|[a-z0-9.-] [.][a-z]{2,4}/)(?:[^s()<>] |(([^s()<>] |(([^s()<>] )))*)) (?:(([^s()<>] |(([^s()<>] )))*)|[^s`!()[]{};:'".,<>?«»“”‘’]))/', '/(^|[^a-z0-9_])@([a-z0-9_] )/i', '/(^|[^a-z0-9_])#([a-z0-9_] )/i'), array('<a href="$1" target="_blank">$1</a>', '$1<a href="">@$2</a>', '$1<a href="index.php?hashtag=$2">#$2</a>'), $msg);
 return $message;
}
  

Спасибо..

Комментарии:

1. Всегда ли есть фамилия? Если нет, то как регулярное выражение должно определять, какие части принадлежат имени пользователя?

2. имя и фамилия обязательны

Ответ №1:

Общий метод для этого будет:

 $regex = '~(?i)@[a-z] [ ][a-z] ~';
$replaced = preg_replace($regex,'<a href="">$0</a>',$string);
  

Примечания

  • Я оставлю это для вас, чтобы заполнить пробелы
  • Одной из проблем с именами является диапазон допустимых символов. А как насчет Джули О’Хара? M.C. Cocoa? и т.д.

Комментарии:

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

2. Абсолютно! preg_replace_callback($regex,function($m) {// do whatever you like here, look up etc, then return your replacement or $0 unnchanged },$string);

3. должен ли я использовать preg_replace_callback вместо preg_replace ?

4. Ну да, если вы хотите проверить базу данных и т. Д., Используйте функцию обратного вызова, как я показал вам в комментарии выше. Если вам нужна уверенность, вы можете увидеть то же самое на этой странице руководства , надеюсь, это ответит на ваш вопрос. 🙂

5. Спасибо, рад, что это помогло. 🙂