正则表达式,找到两个分隔符之间的所有单词

时间:2013-05-07 23:16:41

标签: php regex

我需要一个正则表达式来匹配以下内容:

字符串:“你好#world是#party time#”
匹配:“世界”和“派对时间”

在玩正则表达式时,我只能匹配其中一个但不能同时匹配。这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

目前没有解决方案,现在就设置它的方式。使用#作为“停止间隙”与想要匹配非间隔单词和间隔单词相比,存在歧义。问题是space..it是一个有效字符和无效字符,具体取决于值,并且没有其他方法可以判断哪个是哪个。

你无法将其分解为多个正则表达式。如果您首先尝试#([^#]+),则会匹配#world#party。如果您首先尝试#([^#]+)#,则会匹配world it is。即使您在混合#((?:(?<!\b).)+)#中添加负面观察,也会匹配world it is #party time

要解决此问题,您必须执行

  1. 所有短语的末尾添加#结尾分隔符(您调用它时的“停止间隙”),甚至是单个单词。然后你可以#([^#]+)#
  2. 将短语中的空格更改为其他内容(例如 下划线)。然后你可以做#([^\b]+)(这可能会根据你换空间的内容而有所不同)