【问题标题】:Regular expression for string between any quotation mark任何引号之间的字符串的正则表达式
【发布时间】:2016-02-21 15:55:50
【问题描述】:

我想为一个以引号开头并以相同标记结尾的字符串编写正则表达式。它由字母数字单词组成(例如“PL”或“CS”……)。 我想过 [^"].*[^"] ,但这仅适用于 "" 这些。 我想要像这样的输出 输入:“CS300” 输出:1 tSTRING 或者 输入:'a' 输出:1 tSTRING

谢谢

我的代码是

%{
int linecounter=1;
%}
%%
\n linecounter++;
(['"])[^'"]*\1 printf("%d tSTRING \n", linecounter);
%%
main()
{
yylex();
}

【问题讨论】:

    标签: regex flex-lexer


    【解决方案1】:

    使用否定字符类和反向引用:

    (['"]).*?\1
    

    说明:

    (['"]) : matches a single or a double quote and keep it in group1
    .*?    : matches what is between
    \1     : backreference, same quote as in group 1
    

    如果您的正则表达式不支持惰性量词:

    (['"])[^'"]*\1
    

    【讨论】:

    • 当我写 (['"]).*?\1 或 (['"])[^'"]*\1 并且我在终端它没有捕获并且没有打印它。
    • @M.J.Watson:请编辑您的问题并添加一段代码。但我不得不说我对 flex 并不熟悉。此正则表达式适用于 PCRE 正则表达式。
    【解决方案2】:

    我写了 \"(\.|[^"])\" 和 \'(\.|[^'])\' 现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2013-07-18
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      相关资源
      最近更新 更多