Рассмотрим следующие твиты:
RT @username This is my tweet Check this! RT @username This is my tweet I have PART 2 downloaded
В preg_replace()
я использую регулярное выражение, чтобы заменить RT
(общий синтаксис ретветов ) на {RT}
. Он почти работает, однако он также соответствует RT
в PART
в последнем твитте:
I have PART 2 downloaded
I have PA{RT} 2 downloaded
Я хочу, чтобы регулярное выражение не допускало ничего (начало строки) или пробела (U + 0020) перед RT
.
Текущий preg_replace()
:
echo preg_replace("(\RT(?=\s)/", '{RT}', $tweet);
Добавьте (^|[ ])
до RT
в вашем регулярном выражении, чтобы соответствовать началу строки или пробелу. Добавьте еще символы между квадратными скобками, чтобы включить их (например, (^|[ _])
чтобы также соответствовать символам подчеркивания.
^
соответствует началу строки [ ]
соответствует пробелу (U + 0020) (или любому другому символу между [
и ]
) (
& )
создать группу |
между (
& )
средствами или (^|[ ])
означает группу, которая является либо началом строки, либо пространством (U + 0020) echo preg_replace("/(^|[ ])(\RT(?=\s))/", '$1{RT}', $tweet);
Примечание: @DVK было упомянуто, что плохая практика соответствует только началу строки и пробелу (а не границам слов). Поскольку конкретные символы запрашивались OP, сопоставление по границам слов не является технически корректным. Однако, поскольку @DVK действительно допустил ошибку, я хотел бы упомянуть, что использование (\b)
вместо (^|[ ])
во многих случаях даст результаты, которые лучше подходят для вашей идеи «правильно» (например, «Awesome , RT Some tweet. "). Тем не менее, имейте в виду, что эта заметка была добавлена после принятия и никоим образом не является частью ответа на этот конкретный вопрос – она предоставляется только тем, кто может столкнуться с этим ответом для подобной, но другой проблемы.
Используйте \b
для соответствия границе слова . \bRT\b
Отредактировано: ^ \ s * RT
будет соответствовать любой строке, начинающейся с RT или пространства, такого как RT
Я думаю, что лучший способ проверить RT – это регулярное выражение для проверки RT (пробела) @username. Это означает, что у вас есть что-то вроде
#RT\s@([a-zA-Z0-9_]+)#
Конечно, вам нужно будет изменить [a-zA-Z0-9 _] + в зависимости от того, какие символы разрешены в имени пользователя. Учитывая, что это твит, twitter позволяет писать буквы, цифры и подчеркивания, чтобы это регулярное выражение работало нормально.