【发布时间】:2017-06-28 13:01:17
【问题描述】:
我有一个正则表达式,几乎可以按我的意愿工作,但我需要有关如何仅在字符串末尾删除除选定主题标签之外的所有主题标签的建议。
现在我有以下内容:
preg_replace('/(?!#hashtag|#DoNotRemoveThis)(#[\w-]+)/', '', $post_caption);
输入(去掉粗体): 字符串中间的任何#hashtag 都不应被删除,无论它是什么,例如#DoNotRemoveThis #KeepThisHashtag 和字符串末尾的任何主题标签都应该被删除,除非它与正则表达式中的异常匹配。 #deletethis #DoNotRemoveThis #thismustgoaway
想要的输出: 字符串中间的任何#hashtag 都不应被删除,无论它是什么,例如#DoNotRemoveThis #KeepThisHashtag 和字符串末尾的任何主题标签都应该被删除,除非它与正则表达式中的异常匹配。 #DoNotRemoveThis
唯一的问题是它还会删除字符串中间未指定的主题标签——我希望字符串中的所有主题标签保持完整,并删除末尾的所有主题标签(排除的主题标签除外)。
请查看现场示例以获得更好的理解:https://regex101.com/r/A0Ebor/1
【问题讨论】:
-
/(?!#hashtag|#DoNotRemoveThis)(#[\w-]+)$/尝试在正则表达式的末尾添加一个美元符号(表示字符串的结尾) -
好的,我明白了:最后是一系列标签。
-
@WiktorStribiżew 是的,我想删除#deletethis 和#thismustgoaway。其他主题标签应保持不变。
-
在您的示例中,不应删除倒数第三个标签 (#deletethis),对吗?因为它不在字符串的末尾……那你为什么把它命名为#deletethis?请澄清
标签: php regex string preg-replace