我现在已经尝试了几个小时,也在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
我想要提取的是:Lorem
,Ipsum-/Dolor
,Dolor
,Sit amet.
,Last one
。所以基本上从句子开头或斜线到结肠之后都是一切。
无论我尝试什么,问题始终是foobar
,因为它始终与Last one
结合在一起。到目前为止我尝试的例子是:( \/ |\A)([^(?!.* \/ )].*?):
我希望从斜杠开始直到结肠,但不是如果有/
(空格,斜线,空格),则提取所有内容。这样我就确保不要让foobar / Last one
返回。
有人可以给我一些提示吗
答案 0 :(得分:6)
请注意,在将序列模式放入字符类([...]
)时会犯一个常见错误,从而使正则表达式引擎与单个字符相匹配定义的集合。 [^(?!.* \/ )]
与(
,?
,!
,.
等其他字符匹配。
您可以使用tempered greedy token:
(?: \/ |\A)((?:(?! \/ )[^:])+):
^^^^^^^^^^^^^^^^
请参阅regex demo。文字空格可以替换为\s
(如果可以匹配任何空格)或\h
(仅匹配水平空格)。
<强>详情:
(?: \/ |\A)
- 空格+ /
+空格或字符串开头((?:(?! \/ )[^:])+)
- 第1组捕获:
([^:]
)以外的一个或多个符号,这些符号不是空间的起点 + {{1 } + 空间序列/
- 字面冒号。