我有一些正则表达式将某些字段名称与赋值表达式分开。到目前为止,字段名称已经足够清晰,正则表达式可以正常工作,但现在字段名称使用非法字符(从语言语法的角度来看,在这种情况下是AS3)我开发的正则表达式正在挣扎。如果我给你一个问题的前,后和详细信息,它可能是最好的。
我目前的正则表达式如下:this\.(.*)?[=,]
。到目前为止,它已经起作用,因为字段名称不包含=
或,
个字符。但是现在代码似乎被一些东西混淆了,导致字段名称变得非法,并且它不起作用。在赋值表达式之前看起来像:
this._-E12=_arg1.readInt();
当时正则表达式找到并捕获_-E12
。现在,赋值表达式如下所示:
this.^"-=,#I.readInt();
正如你可以想象的那样,正则表达式不喜欢这么多并且捕获^"-=
它实际上应该捕获^"-
。正则表达式中的,
是有原因的,并且它用于匹配像_arg1.readBytes(this._-E12, 0, count);
这样的行。
我认为我正在寻找的是找到=
角色的最后一个实例的一些方法,但这也不是一个完美的解决方案,因为没有办法保证我们不会得到一行看起来像:this.^"-=,=I.readInt();
。
这可能是一个愚蠢的问题,在Regex中可能没有办法做到这一点,但是那里有所有令人惊叹的人,并且人们已经写过正则表达式的大小,我确信必须有一些东西!
对于一些更具体的例子,这是我正在寻找的:
this.^"-=,#I.readInt();
将匹配^"-
arg1.readBytes(this.^"-, 0, count);
将匹配^"-
this.0$R=readInt();
将匹配0$R
arg1.readBytes(this.0$R, 0, count);
将匹配0$R
this.^=s=readInt();
将匹配^=s
arg1.readBytes(this.^=s, 0, count);
将匹配^=s
this.$s==readInt();
将匹配$s=
arg1.readBytes(this.$s=, 0, count);
将匹配$s=
答案 0 :(得分:1)
我认为这样做会使用积极和消极的外观:
(?<=\(this\.).*?(?=,)|(?<=(?<!\()this\.).*(?==)
请注意,我在,
之前使用非贪婪的通配符,否则它将捕获函数的多个参数。但是我在=
之前使用了一个贪婪的通配符,以便找到最后一个=
。
Regexr test为您的所有示例提供了正确的答案。它是否会在更一般的情况下起作用,我无法确定。
答案 1 :(得分:0)
匹配像=
这样的字符的最后一个实例是可能的:
.*=[^=]*
零个或多个,然后是=
,然后是零个或多个非=
个字符。
但是,您需要明确指定要匹配的案例:例如。在这些极端情况下,=
应匹配为字段/值。