我如何在正则表达式中表达“匹配直到不包含该模式的模式”?

时间:2011-02-18 11:04:17

标签: regex

我有这个输入:

{http://sdfgdf.dfg.dfg.dfg#value1 : http://sdfgdf.dfg.dfg.dfg#value2}

我想只匹配第一个网址中的value1。 我想下面的正则表达式:

[^#]\w*\s:

但这匹配“value1:”

我如何表达“匹配直到\ s :,不包括那种模式?”

2 个答案:

答案 0 :(得分:3)

零宽度前瞻。在Java你可以这样做:

[^#]\w*(?=\s:)

您可以考虑使这个正则表达式更灵活,处理额外的空格等等......以防输入与您期望的略有不同。

答案 1 :(得分:1)

老实说,如果您的输入总是如此简单,我就不会使用正则表达式。例如,您可以在“”上执行字符串拆分并获取第一个项目。

myInput.Split(" ")[0]; // Example in C#

或者你可以做一个子串......

myInput.Substring(0, myInput.IndexOf(" "));

但如果你真的想要正则表达式......

(?=.*\s)[^\s]+

正则表达式上写着:“虽然前方某处是一个空格,但匹配任何不是空格的角色。”