代码之家  ›  专栏  ›  技术社区  ›  Thanatos

Visual Studio正则表达式“?”

  •  5
  • Thanatos  · 技术社区  · 15 年前

    MSVS:regex在哪里 ?

    我在MSVS 2008中有一些代码试图与正则表达式匹配,但是我无法找出它的正则表达式。举个典型的例子:

    colou?r
    

    …这是一个匹配的正则表达式 color colour ? .

    colo(u|)r
    

    但是,我得到了“Grouped expression is missing’)”。。。它是。。。不是。奇怪的是,MSV有这些带花括号的备用组(我不确定为什么…):

    colo{u|}r
    

    基本上,我该怎么做 ? ? 我的实际输入并不像颜色那样简单,否则我会用 (color|colour) . 我想可以假装,但这是一种愚蠢的做法。


    那我们试试交替。。。

    ^[A-Z]+\t[0-9]+\t[^\t]+
    
    ^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+
    

    这两行匹配两组行,分别匹配我的文本。(第一个匹配第二个匹配的部分行。)

    BZD 084 Belize dollar
    CAD 124 Canadian dollar
    CDF 976 Franc Congolais
    CHE 947 WIR euro    (complementary currency)
    CHF 756 Swiss franc
    CHW 948 WIR franc   (complementary currency)
    CLF 990 Unidad de Fomento   (funds code)
    

    (例如,WIR euro和(补充货币)之间有标签,但它们并不总是存在。)

    从逻辑上讲,应该遵循这一点来组合

    ^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+
    

    ^[A-Z]+\t[0-9]+\t([^\t]+|[^\t]+\t[^\t]+) ……不知怎么的,它似乎相当于第一组中的第二个表达式。

    5 回复  |  直到 15 年前
        1
  •  4
  •   Welbog    15 年前

    我们自己的 Jeff Atwood 前一阵子写的。基本上,Visual Studio的regex实现是非常不标准的,并且没有简单的方法来完成通常使用的' ? '. 你得用你的 {colour|color} 表达。

        2
  •  1
  •   Aaron    15 年前

    虽然没有文档记录,但我发现字符串“()”将与空字符串匹配。例如:

    colo(u|())r
    

    ^[A-Z]+\t[0-9]+\t{[^\t]+(\t+[^\t]+|())}
    

    在最后一种情况下,请确保将空字符串交替放在最后,以避免获得部分匹配,或者确保在行尾标记“$”上加上标记。

        3
  •  0
  •   tvanfosson    15 年前

    reference 在MSDN。你最好的选择可能是交替角色

        4
  •  0
  •   eKek0    15 年前

    你试过右边最长的路径吗?

    例如,对于颜色和颜色,它将是:

    colo(ur|r)
    

    ^[A-Z]+\t[0-9]+\t{[^\t]+|[^\t]+\t[^\t]+}
    
        5
  •  0
  •   Greg    15 年前

    这是有效的:

    colo(u)|()r
    

    ^[A-Z]+:b[0-9]+:b[^\t]+(\t[^\t]+)|()