如何在第一次遇到 space char regex 时分隔匹配的子字符串

How to separate matching substring at first met space char regex

我需要匹配 !some text!https://test.com/ 格式的子字符串,其中两个 ! 标记之间的任何内容都是文本,后面是 url 没有 spaces,

到目前为止我做了一个可以找到子字符串的正则表达式 (!(.*)!((https|http):\/\/[^\s+])) 但是当类似的模式在文本中的任何地方重复时,它就无法正常工作。

例如

!text goes here!https://amazon.com and some other text comes here 应该解析

!text goes here!https://amazon.com

它做得很完美,但是当我在文本中的任何地方复制这种模式时,它会匹配两个文本之间的整个文本。

!text goes here!https://amazon.com some text here !text goes here!https://amazon.com and after some other text 匹配整个文本

应该匹配两个单独的 !text goes here!https://amazon.com some 但它将 select 子字符串直到第二个匹配结束

!text goes here!https://amazon.com some text here !text goes here!https://amazon.com

也许它需要第一个 ! 和最后一个 !

之间的整个文本

当space在url文本

之后遇到时,是否有停止匹配的方法

!.*! 匹配由感叹号包围的可能最长的子串;换句话说,它是从第一次爆炸到最后一次爆炸。

您想从第一个 bang 匹配到下一个 bang,这可以是非贪婪匹配 !.*?! 或更精确的匹配 ![^!]*!