我现在已经尝试了几个小时,也在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
归还.
有人能给我一些提示吗?
请注意,在将一系列模式放入字符类([...]
)时会犯一个常见的错误,从而使正则表达式引擎与定义的集合中的单个字符匹配.[^(?!.* \/ )]
匹配比以外的单个字符(
,?
,!
,.
,等.
你可以使用一个驯化的贪婪令牌:
(?: \/ |\A)((?:(?! \/ )[^:])+): ^^^^^^^^^^^^^^^^
请参阅正则表达式演示.文字空间可以替换为\s
(如果可以匹配任何空格)或\h
(仅匹配水平空格).
细节:
(?: \/ |\A)
- 空格+ /
+空格或字符串的开头
((?:(?! \/ )[^:])+)
- 第1组捕获除:
([^:]
)之外的一个或多个符号,这些符号不是空格 + /
+ 空格序列的起点
:
- 一个字面冒号.