正则表达式字符串省略问题

时间:2009-12-18 22:15:54

标签: regex string

我正在尝试使用正则表达式解析一些AS3。我不能,为了我的生活,弄清楚如何省略字符串引用内的匹配。我需要在变量名 testString 中匹配 test ,而不是 test < / em> 引用之间的那些。我不想匹配任何字符串内容的任何内容。

var testString:String = "This is a test String";

4 个答案:

答案 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)

帕特里克提出了关于转义引号和单引号字符串的一些好处,但它甚至比这更糟糕:评论呢?注释可以包含引号(双引号或单引号),字符串文字可以包含看起来像注释分隔符的内容。并且不要忘记正则表达式本身:正则表达式文字可以包含任何这些内容,并且正则表达式也可以以字符串文字的形式编写,以便与RegExp构造函数一起使用。

如果你事先知道这种语法重叠不会发生(或者会非常有限),你可能能够做你想做的事,但它可能会非常难看。但你真正需要的是一个完整的解析器,或者对底层问题采用完全不同的方法。我知道这听起来像是一件非常简单的事情,但它只是非常适合正则表达式的工作方式。