小弟新学正则表达式,需要寻找类里函数调用的参数,比如xxxx(a, b), 或者xxxx.xxxx.xxxx(c, d),可以正确匹配出括号内的a, b以及c, d.
xxxx可以是数字,字母以及下划线。
我写了一个,(?<=^(\w+\.)*\w+\().*(?=\)$),不知道为什么不对,
但是单纯的^(\w+\.)*\w+\(,却可以匹配xxx(, xxx.xxx(, xxx.xxx.xxx(等参数左边的情况,请问问题是出在(?<=)的用法上吗?请各位大哥指教下。

解决方案 »

  1.   


    ?<=和?=是可以搭配使用的
    随便举个例子,比如,(?<=^\w+\().*(?=\)$),你可以测试。
      

  2.   

    根据 Java 中正则表达式的规定,(?<=) 和 (?<!) 这两个逆序环视(lookbehind)中不允许出现 +、*、{n,}  之类不确定最大长度的量词。
      

  3.   


    我在二楼说了,形如(?<=^\w+\().*(?=\)$)是成立的,你可以测试。
      

  4.   

    ?<= 是属于环视的一种,它的意义是“后面的内容作为非捕获组必须出现”。
    后面还有一个?=,这又是正向环视。
    在你这个例子中,使用的方法出错了,删除他们可以直接匹配,详细的去了解一下环视(又叫零宽断言)的内容。
    ?<=和?=是可以搭配使用的
    随便举个例子,比如,(?<=^\w+\().*(?=\)$),你可以测试。
    根据 Java 中正则表达式的规定,(?<=) 和 (?<!) 这两个逆序环视(lookbehind)中不允许出现 +、*、{n,} 之类不确定最大长度的量词
      

  5.   

    Java中的(?<=expression),expression只支持固定长度的表达式和量词“?”,其它不定长度的量词“*”、“+”、“{m,n}”等等都是不支持的
    而.NET中是全部都支持的
    所以楼主的这个正则表达式,在Java中是不能用的,在.NET中是可以用的