Если у меня есть эта строка:
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);
}
Вам нужно найти это регулярное выражение:
(?<!\w)@test
И замените на:
@replace
Код:
$result = preg_replace('/(?<!\w)@test/im', '@replace', $input);
(?<=\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);
@
находится на первой позиции.