2013-11-06 12 views
1

я следующее:Удалить символ @ из строки

preg_replace('/\[email protected][^\B ]+/', '<a href="profile.php">$0</a>'); 

который проверяет любую строку, которая начинается с @ и заканчивается в пространстве и превращает его в ссылку.

Теперь мне нужно создать еще одну preg_replace, которая удалит символ из строки, например @hello, так, чтобы он просто стал hello.

Мне нужно это, чтобы я мог изменить ссылку в первом preg_replace, чтобы стать <a href="profile.php?user=hello>$0</a>.

Пожалуйста, помогите!

ответ

3

Вы можете обернуть часть вашего патерн в(), чтобы создать новую переменную В этом случае вы будете иметь свою строку матч без @ под $ 1 переменной

preg_replace('/\[email protected]([^\B ]+)/', '<a href="profile.php?profile=$1">$0</a>'); 

Working example

+2

Пожалуйста, добавьте поясняющий текст, а также, чтобы подчеркнуть ваши изменения и почему это работает. Код всегда очень по-теме, но StackOverflow - это не просто «CodeExchange». – mario

+0

Спасибо adam. @mario Я понимаю это сейчас. Дополнительные скобки позволили ему определить, что такое $ 0 и $ 1. – Bagwell

1

Вы можете использовать захват группа () вокруг вашего рисунка, вы хотите, чтобы снял, чтобы отделить захваченное совпадение и всю строку. Затем вы можете разместить свой захваченный матч $1, где хотите, и использовать $0, чтобы получить доступ ко всей строке.

preg_replace('/\[email protected](\S+)/', '<a href="profile.php?profile=$1">$0</a>', $str); 

Здесь вы можете использовать здесь \S. Я не рекомендую использовать \B внутри класса символов с отрицанием.

Регулярное выражение:

\B   the boundary between two word chars (\w) 
       or two non-word chars (\W) 
@   '@' 
\S+   non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times) 

См working demo

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