使用正则表达式匹配函数参数

时间:2014-07-18 14:38:11

标签: regex

我有一些混淆代码调用函数,如下所示:

getAny([["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]);
setAny([["other text with \"()[],.;\""], ...]);...

参数包含随机文本。函数相互跟随,没有换行。

如何使用正则表达式集合获取getAnysetAny和其他函数的参数?

我需要这个结果:

regex1 result: [["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]
regex2 result: [["other text with \"()[],.;\""], ...]
...

我尝试写regex1

getAny\((.*)\)

但匹配结果还包含setAny调用

 [["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]);setAny([["other text with \"()[],.;\""], ...]

当我尝试时:

getAny\((.*?)\)

匹配结果break参数字符串

[["text with symbols \"(

我无法按;);拆分,因为参数中的文字可以包含符号;);

使用正则表达式可能无法做到这一点?

3 个答案:

答案 0 :(得分:2)

你的正则表达式需要\(.*?\);,因为你的代码被混淆了(假设在一行上)。

请注意,如果您的某个参数中包含);,则会失败。

解释(来自Regex101.com):

/\((.*?)\);/g
  \( matches the character ( literally
    1st Capturing group (.*?)
      .*? matches any character (except newline)
      Quantifier: Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
  \) matches the character ) literally
  ; matches the character ; literally
  g modifier: global. All matches (don't return on first match)

你的正则表达式的主要问题是你从未指定;来结束匹配,所以它继续前进并抓起它直到它看到的最后),因为你使用了.*,这是贪婪的(抓住一切),除非后跟?

Demo

答案 1 :(得分:0)

我不知道,如果我理解你的问题,但是如果我这样做,你可以使用一个小组并收集允许的标志。

你的正则表达式可能是:\( ( ) " [ ],\.; a-zA-Z \)

外部括号将组

括起来

答案 2 :(得分:0)

如果我正确理解您的模式,您的函数参数将始终以[["开头,并以"]]结尾。

正则表达式:

/getAny\((\[\[".*?[^\\]"\]\])\);/

演示:http://regex101.com/r/jC3vX5/2

请注意惰性.*?[^\\],以确保不会转义匹配的报价。