正则表达式([ - (?!\ [| \] | \)09XYAB \ [\] \ - ]){0,}不起作用

时间:2013-08-17 11:54:26

标签: regex regex-lookarounds

正则表达式必须满足以下条件:

  • 允许的字符09XYAB[]-
  • 在“-”之后,我找不到空格,“]”或“[
  • 此外,我必须检查括号的顺序。

我已经写了这个表达式“([-(?!\[|\]|\ )09XYAB\[\]\-]){0,}”,但我一直收到错误结果,让我们说这个测试字符串为“ABY-Ab[A0-]”。

3 个答案:

答案 0 :(得分:0)

使用此正则表达式^([09XYAB\[\]]|(-(?![ \[\]])))+$

此部分[09XYAB\[\]]抓住09XYAB[] 此部分(-(?![ \[\]])))抓住-[]或空格不能成为下一个符号

唉,正则表达式不能检查顺序,这是正则表达式的艰巨任务,它不是为了这个目的

答案 1 :(得分:0)

如何:

^(?!-[\[\]])[09XYAB\[\]-]+$

<强>解释

The regular expression:

(?-imsx:^(?!-[ \[\]])[09XYAB\[\]-]+$)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
----------------------------------------------------------------------
    -                        '-'
----------------------------------------------------------------------
    [ \[\]]                  any character of: ' ', '\[', '\]'
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------
  [09XYAB\[\]-]+           any character of: '0', '9', 'X', 'Y', 'A',
                           'B', '\[', '\]', '-' (1 or more times
                           (matching the most amount possible))
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

答案 2 :(得分:0)

@ burning_LEGION的答案正确提供了解决方案的前半部分。这个答案提供了下半年;验证匹配的括号对,即使它们是嵌套的。 @Sniffer是正确的,单个正则表达式无法完成。但是,正确解析嵌套结构可以使用JavaScript正则表达式从内到外解析相当容易...

JavaScript解决方案[针对[嵌套]括号]

由于JavaScript正则表达式语法不提供递归表达式,因此当括号嵌套时,不可能匹配最外面的匹配括号对。但是,编写一个正确匹配最里面的匹配括号对的正则表达式非常容易:

/\[[^[\]]*\]/g

下面测试的JavaScript函数验证了可能具有嵌套括号对的字符串的正确括号对匹配。它是通过使用上面的正则表达式从内向外迭代地剥离匹配的最里面的括号对来实现的。一旦删除了所有(可能是嵌套的)匹配对,任何剩余的括号字符都表示该字符串具有无效的括号匹配。

function validBracketNesting(text) {
    // Regex to match innermost matching brackets
    var re_innerbrackets = /\[[^[\]]*\]/g;
    // Iterate stripping matching bracket pairs from inside out.
    while (text.search(re_innerbrackets) !== -1) {
        text = text.replace(re_innerbrackets, '');
    } // All (possibly nested) matching bracket pairs removed.
    // Any remaining bracket indicates invalid bracket pairing.
    return (text.match(/[[\]]/)) ? false : true;
}