(我正在逃避所有引用,这可能会让你难以阅读)
我需要在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'
中返回所有匹配的内容感谢您的帮助!
答案 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
开头和结尾,并在其中包含换行符)