Я хотел бы удалить все слова в конце текста, начинающиеся с space
а также #
знак.
URL-адреса или хэштеги в предложении не должны быть удалены.
Пример текста:
hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö
Я пробовал это, но он удаляет все хэштеги:
$tweet = "hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö";
preg_match_all("/(#\w+)/", $tweet, $matches);
var_dump( $matches );
Моя идея состоит в том, чтобы проверить каждое слово, начинающееся в конце текста, чтобы найти #
с space
впереди, пока это не так.
Как перевести это в регулярное выражение?
Вы можете использовать что-то вроде этого: ( #[^# ]+?)+$
и замените его пустой строкой.
Пример доступен Вот. Поскольку у вас нет символов ASCII, .
Оператор (который соответствует любому персонажу) должен помочь вам справиться с любым персонажем.
Следующее регулярное выражение соответствует всем словам, начинающимся с [Space]#
в конце строки.
/( #\S+)*$/g
Это сделает работу:
$tweet = "hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö";
$res = preg_replace("/ #\p{L}+\b(?!\s+\p{L})/u", '', $tweet);
echo $res,"\n";
Выход:
hello world #dontremoveme foobar http://example.com/#dontremoveme