我正在尝试使用正则表达式来匹配与函数对应的某些字符串组。现在它看起来像这样:
(Spreadsheet.[^)\)]+\))
它找到具有该函数作为属性的变量Spreadsheet。表达式一直持续到它到达最后的括号。对于简单的功能,如
Spreadsheet.ADD(1,2)
正则表达式可以正常工作。
但是,如果我尝试进行任何类型的嵌套,则表达式不起作用,因为它将停在内侧括号中而不是转到最后一个括号。
Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)
因此,“,3)”未被识别,结尾被忽略。当然,由于我的代码处理它的方式,这个不寻常的字符串最终导致错误。
对正则表达式有更多了解的人是否知道它是如何被改变的,只有当它在最后一个括号而不是第一个时才会停止?
感谢。
答案 0 :(得分:2)
假设您只想匹配您在问题中声明的表单中的函数。如果你想匹配任何类型的函数(包括运算符,嵌套的注释等),那么你想要的是正则表达式很难,请参阅 here 。无论如何,要匹配您可以使用的最后一个括号:
(Spreadsheet\..+\))
这将匹配
Spreadsheet.ADD(1,2)
Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)
Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)
富
(foo不是比赛的一部分)
你的正则表达式与完整字符串不匹配的原因是因为它会在找到不是)
的字符时停止,这是第一个)
。此外,旁边Spreadsheet.
将匹配Spreadsheeta
,Spreadsheetb
,Spreadsheetc
。要匹配您需要的点\.
。
在我的正则表达式.+)
中将包含最后一个括号,因为+
是贪婪的,所以它将获得最长的匹配。另外,您可以使用+?