开发者

Flex (regex fine)- matching strings that begin and end with the same character

(I'm escaping all my quotes, which may make it difficult to read)

I need to match a string that begins and ends with the same character in flex...I know the long hand way (RE being - \"a[^(a\")]a\" | \"b[^(b\")b\" | etc...), but I'm positive this isn't what I'm required to do (midterm tomorrow!);

I need to do this in flex, but if you can think of a short regex for it, I may be able to convert it to flex notation.

What I was thinking of was something along the lines of -

%%
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); }

(new to flex, may be incorrect notation)

But this bugs me in a few ways, first, having that variable makes this not a regular language; second, I don't know if you can even use a variable to in a pattern match; and third, I don't know how NOT to match it, if it's just a normal st开发者_JAVA百科ring. And third, I don't know how to return everything that's been matched while in 'string'

Thanks for your help!


Use backreference. \1 to \9 refer to the first nine groups captured by the regex using parentheses ().

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]);

traces

text
that
starts

Regex explained:

\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
            */


(I'm escaping all my quotes, which may make it difficult to read)

I need to match a string that begins and ends with the same character in flex...

Try something like this:

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

Which seems to work for Flex' regex according this Flex regex tester with the string

she sells seashells 
by the seashores

(starts and ends with an s and has a line break in it)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜