【问题标题】:Regex matching bracket when it should not不应该的正则表达式匹配括号
【发布时间】:2012-06-06 21:56:27
【问题描述】:

输入:

"a[href*=\"test\"]"

我正在尝试从以下 jQuery 选择器中匹配标签名称:

Regex r = new Regex("^[A-z]+");
string tagName = r.Match("a[href*=\"test\"]").Value;

问题在于它收集了左括号,而不仅仅是 A 到 z:

tagName = "a[href"

如果没有在表达式中指定,为什么要收集括号?

【问题讨论】:

    标签: c# javascript regex tags


    【解决方案1】:

    因为这个

    [A-z]
    

    创建一个从 ASCII 'A' 到 ASCII 'z' 的字符范围。在 Z 和 a 之间还有字母以外的字符,其中之一是 [ 字符。改为使用:

    [A-Za-z]
    

    匹配A-Z 的范围a-z 的范围,但不匹配它们之间的字符。您可以查看ASCII table 以了解具体信息,但总结是字符(按其数字 ASCII 顺序)如下所示:

    A, B, ..., Y, Z, [, \, ], ^, _, `, a, b, c, ..., z
    

    【讨论】:

    • @John,如果它解决了您的问题,您应该接受正确的答案。 (选中该答案的投票下方的标记,使复选标记变为绿色。)
    【解决方案2】:

    您应该尝试使用 regexpal 之类的工具来测试此类内容。这是您的示例:

    http://regexpal.com/?flags=g&regex=^%5BA-z%5D%2B&input=a%5Bhref*%3D%5C%22test%5C%22%5D

    对我来说奇怪的是小写的“z”——出于某种原因,它允许括号通过。

    试试这个:

    ^[^\[]+
    

    http://regexpal.com/?flags=g&regex=^%5B^%5C%5B%5D%2B&input=a%5Bhref*%3D%5C%22test%5C%22%5D

    【讨论】:

    • 我不是反对者,但我认为投票发生是因为您实际上没有提供问题的答案(为什么它会在何时收集括号它没有在表达式中指定?)。提供解决方法并承认自己对这个问题感到困惑,如果这个问题像这里这样一个基本问题,在许多人的书中都是 -1。
    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多