我正在尝试使用正则表达式解析一些AS3。我不能,为了我的生活,弄清楚如何省略字符串引用内的匹配。我需要在变量名 testString 中匹配 test ,而不是 test < / em> 引用之间的那些。我不想匹配任何字符串内容的任何内容。
var testString:String = "This is a test String";
答案 0 :(得分:1)
^[^"]*test
将用于示例abolve,匹配测试,前面没有引号,你需要匹配引号之后的测试,但是在同一行上如...
method("string",test);
如果是这样,你将需要更复杂的东西,比如
^[^"]*(?:"[^"]*")*[^"]*test
将(希望)匹配任何数字(0或更多)引号对,然后进行测试。
答案 1 :(得分:1)
您可以拥有这样的代码,但请记住,在as3中,字符串可以是"rfwerfwer"
或'sfsrfwervwer'
或"fvsfv\"sdfvsdfv"
或'sfvsdfv\'fvsfvsdfv'
。解析时只使用regexp很难。
正则表达式说第一组中的所有字符都不是"
那么你可以在第二组中有一个"
,如果是这样的话,除了"
所以你将拥有第一组var s:String=
和第三组,如果它存在没有引用This is a test String
的字符串。
in as3
var s:String='var testString:String = "This is a test String";';
var re:RegExp=/([^"]+)("([^"]+)")?/;
var o:Array=re.exec(s);
if (o){
trace(o[1])
}
答案 2 :(得分:1)
匹配c语言中的字符串的正则表达式(使用反斜杠转义)就像这样
"(\\\\.|[^"])*"
基本上,“匹配报价,然后任意数量(转义序列或不报价),然后引用”。
匹配外部字符串要复杂得多,最简单的方法是分两次解析:首先,用以下内容替换上面的内容(即消除所有字符串),然后在其余部分找到主题(即所有不是字符串的东西。)
说,正则表达式不是解析编程语言的合适工具。考虑一个解析器:yacc,lemon或类似的。
答案 3 :(得分:1)
如果你事先知道这种语法重叠不会发生(或者会非常有限),你可能能够做你想做的事,但它可能会非常难看。但你真正需要的是一个完整的解析器,或者对底层问题采用完全不同的方法。我知道这听起来像是一件非常简单的事情,但它只是非常适合正则表达式的工作方式。