有条件的正则表达式问题

时间:2009-12-11 09:44:01

标签: regex

我有正则表达式问题,我想我错过了正则表达式的实际工作方式。

我有一些包含方法定义的字符串

  • myMethod1()
  • myMethod2(argument1 arg1)
  • myMethod3(argument1 arg1,argument2 arg2)

但其中一些还包含输出类型:

  • myOtherMethod1():type1
  • myOtherMethod2(argument1 arg1):type2
  • myOtherMethod3(argument1 arg1,argument2 arg2):无论

我想只有像第一个那样的输入:取出输出参数。 我拿出了我的正则表达式帽子,并提出了一些有条件的正则表达式:

(?([:]+)(.+(?=\s:))|(.+))

如果我在我的字符串中匹配一个“:”字符,我会采取“:”之前的任何内容,如果不是我全部采取。 理论上这是正确的,但它返回整行 如果我将正则表达式更改为

(?([:]*)(.+(?=\s:))|(.+))

然后第二种类型的方法被正确地复制,但不是第一种(奇怪的......)。 你能解释一下我的错误在哪里吗?

非常感谢,

3 个答案:

答案 0 :(得分:1)

没有必要像这样处理它。只需要接受你遇到的第一个右括号:

/^[^)]*\)/

除非我误解你的问题......

答案 1 :(得分:0)

我不知道你的正则表达式有什么问题。我会使用一个更简单的正则表达式来匹配你想要的东西:

^.*\)

这匹配行的开头,后跟任何字符,后跟))之后可能存在文本的事实无关紧要。

答案 2 :(得分:0)

我想出了^(.*?\)).*$

这匹配字符串的开头(^),后跟任何字符,直到(并包括)第一个右括号(.*?是任意字符的懒惰匹配,所以它将匹配到第一个)\)需要转义字符串。)行的其余部分被忽略(.*$) - 让你使用多行选项,否则你会只匹配第一部分。 额外的括号是捕获组,因此您可以使用$ 1作为替换。