preg_replace для сопоставления шаблона с любой стороны селектора

0

Если у меня есть эта строка:

I am a @test and I am another@test

Я хочу заменить все экземпляры @words SPACES перед ними другой строкой.

Таким образом, выше

I am a @replace and I am another@test

Последняя часть не заменяется, потому что перед @

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

$mentioned = [[0] => "@test", [1] => "@anotherword"];
$tweet = "This is a tweet with @test in it and also @anotherword";

foreach ($mentioned as &$mention) {
            $mention = "@".$mention;
            $mention_link = "<a href='#'>".$mention.'</a>';
            preg_replace('/ (@) /', $mention_link, $tweet);
        }
Теги:
arrays

2 ответа

1

Вам нужно найти это регулярное выражение:

(?<!\w)@test

И замените на:

@replace

Демо-версия RegEx

Код:

$result = preg_replace('/(?<!\w)@test/im', '@replace', $input);
  • 0
    Пробовал этот код, но он не работает: pastebin.com/yc7PKVXx
  • 1
    +1, это также работает, когда @ находится на первой позиции.
Показать ещё 1 комментарий
0
(?<=\s)@\S+

Вы можете использовать это простое регулярное выражение для выполнения задания. См. Демонстрацию.

http://regex101.com/r/tF5fT5/35

$re = "/(?<=\\s)@\\S+/im";
$str = "I am a @test and I am another@test";
$subst = "@replaced";

$result = preg_replace($re, $subst, $str);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню