Regex 使用正则表达式匹配函数参数
我有一些模糊代码调用函数,如下所示:Regex 使用正则表达式匹配函数参数,regex,Regex,我有一些模糊代码调用函数,如下所示: getAny([["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]); setAny([["other text with \"()[],.;\""], ...]);... 参数包含随机文本。函数之间相互跟随,没有新行 如何使用正则表达式集获取getAny、setAny和其他函数的参数 我需要这个结果: regex1 result: [["text with symbols
getAny([["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]);
setAny([["other text with \"()[],.;\""], ...]);...
参数包含随机文本。函数之间相互跟随,没有新行
如何使用正则表达式集获取getAny
、setAny
和其他函数的参数
我需要这个结果:
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\((.*?)\)
匹配结果中断参数字符串
[["text with symbols \"(
我不能按拆分代码>或)因为参数中的文本可以包含符号代码>或)代码>
使用正则表达式可能无法做到这一点?您的正则表达式需要是\(.*)代码>因为您的代码是模糊的(并且假定在一行上)
请注意,如果其中一个参数包含),则此操作将失败代码>在它里面
解释(来自Regex101.com):
正则表达式的主要问题是从未指定
来结束一场比赛,所以它继续前进,直到看到最后一个)
,因为你使用了*
,这是贪婪的(抓住一切),除非后面跟着?
我不知道,如果我理解你的问题,但如果我理解,你也许可以用一个小组收集其中允许的符号
您的正则表达式可以是:\(()“[],\;a-zA-Z\)
外部括号括起组如果我正确理解了您的模式,您的函数参数将始终以[[“
开头,以“]
结尾
正则表达式:
/getAny\((\[\[".*?[^\\]"\]\])\);/
演示:
请注意懒惰的*?
和[^\\]
,以确保匹配的引号不被转义。解析器可能是更好的方法,但是呢?:[gs]etAny\(.*)
不幸的是,函数之间没有新行。[gs]etAny\(.*)\)
-。您假设逗号将始终存在。我认为OP添加了标点符号以表示可能存在“特殊”介于和之间的字符,这不应导致正则表达式失败,也不应作为参数分隔符。@AmalMurali已修复。另外,如果你看他的输入,逗号也被用作参数分隔符。换言之:我认为(?:.+,)*?
在这里是没有用的,因为+
最后是所有匹配的原因。谢谢你的回答——尽管下面有注释,它没有提供足够的解释,说明它是做什么的,以及它解决OP问题的原因。请你解释清楚好吗?@EngineerDollery很抱歉在你的收件箱中乱发评论,但在阅读了这两个链接后,我不认为这不符合指导原则。根据“如何回答”,我想我可以通过为链接添加一些上下文来解决这个问题,比如“这里是Regex101.com上正在运行的regex的演示”,但我不知道这是否能满足我显然错过的要求。
/getAny\((\[\[".*?[^\\]"\]\])\);/