如何在这个PHP正则表达式中允许斜杠?

时间:2017-01-26 14:44:54

标签: php regex

我现在已经尝试了几个小时,也在Stackoverflow上阅读了Regex维基,但似乎无法完成这个正则表达式。这是我的字符串:

Lorem: 8 FB / Ipsum-/Dolor: Some Text / Dolor: Some text with (brackets) / Sit amet.: Some Text with/slash / foobar / Last one: 36 foos

我想要提取的是:LoremIpsum-/DolorDolorSit amet.Last one。所以基本上从句子开头或斜线到结肠之后都是一切。

无论我尝试什么,问题始终是foobar,因为它始终与Last one结合在一起。到目前为止我尝试的例子是:( \/ |\A)([^(?!.* \/ )].*?):我希望从斜杠开始直到结肠,但不是如果有/(空格,斜线,空格),则提取所有内容。这样我就确保不要让foobar / Last one返回。

有人可以给我一些提示吗

1 个答案:

答案 0 :(得分:6)

请注意,在将序列模式放入字符类([...])时会犯一个常见错误,从而使正则表达式引擎与单个字符相匹配定义的集合。 [^(?!.* \/ )](?!.等其他字符匹配。

您可以使用tempered greedy token

(?: \/ |\A)((?:(?! \/ )[^:])+):
             ^^^^^^^^^^^^^^^^

请参阅regex demo。文字空格可以替换为\s(如果可以匹配任何空格)或\h(仅匹配水平空格)。

<强>详情:

  • (?: \/ |\A) - 空格+ / +空格或字符串开头
  • ((?:(?! \/ )[^:])+) - 第1组捕获:[^:])以外的一个或多个符号,这些符号不是空间的起点 + {{1 } + 空间序列
  • / - 字面冒号。