Flex(正则表达式) - 匹配以相同字符开头和结尾的字符串

时间:2009-10-28 04:47:54

标签: regex flex

(我正在逃避所有引用,这可能会让你难以阅读)

我需要在flex中匹配以相同字符开头和结尾的字符串...我知道长手道(RE是 - \“a [^(a \”)] a \“| \”b [^(b \“)b \”|等......),但我很肯定这不是我要做的事(明天中期!);

我需要在flex中执行此操作,但如果你能想到它的短正则表达式,我可以将它转换为flex表示法。

我想到的是 -

%%
int firstChar;
%x string;
%%
\"[A-Za-z] { firstChar = yytext+1; /* to get first character,
                                      for people unfamiliar
                                      with c pointers */
    BEGIN(string);}
<string>[^((firstChar)\")] {}
<string>[(firstChar)\"] { BEGIN(INITIAL); }

(新的flex,可能是不正确的表示法)

但这会让我感到困惑,首先,拥有该变量使得这不是常规语言;第二,我不知道你是否甚至可以在模式匹配中使用变量;第三,我不知道怎么不匹配它,如果它只是一个普通的字符串。第三,我不知道如何在'string'

中返回所有匹配的内容

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

使用backreference\1\9引用正则表达式使用括​​号()捕获的前九个组。

var regex:RegExp = /\b([a-zA-Z])\w+\1\b/g;
var test:String = "some text that starts and ends with same letter";
var result:Object;
while(result = regex.exec(test))
    trace(result[0]);

迹线

  

文本
  该
  开始

正则表达式解释说:

\b          //word boundary
([a-zA-Z])  //capture the first character
\w+         //one or more characters (use * to capture two letter words)
\1          //the first character
\b          //word boundary

g           /*
              make the regex global. Without this, the program will will 
              print the first match ('text') in an infinite loop
            */

答案 1 :(得分:0)

  

(我正在逃避所有引用,这可能会让你难以阅读)

     

我需要在flex中匹配以相同字符开头和结尾的字符串...

尝试这样的事情:

^(?s)(.).*\1$

根据this Flex regex tester的字符串

,似乎适用于Flex'正则表达式
she sells seashells 
by the seashores

(以s开头和结尾,并在其中包含换行符)