代码之家  ›  专栏  ›  技术社区  ›  Glenn Block

Regex Newbie问题[已结束]

  •  1
  • Glenn Block  · 技术社区  · 15 年前

    鉴于此文本

    “福(巴)”

    我想用正则表达式提取“bar”。

    救命!

    5 回复  |  直到 15 年前
        1
  •  5
  •   Amber    15 年前
    /.*\((.*)\)/
    

    第一个.*将匹配插入前的任何内容,第二个.*将匹配插入后的任何内容并返回给您。

    (我假设示例文本中的引号实际上不是您想要匹配的字符串的一部分。)

        2
  •  2
  •   Philippe Leybaert    15 年前

    如果没有嵌套括号:

    (?<=\().*?(?=\))
    
        3
  •  1
  •   Gregory Mostizky    15 年前

    只需搜索“bar”。

    例如,在groovy中:

    if("Foo(Bar)" =~ /Bar/) {
        println "match"
    }
    

    将打印“匹配”

        4
  •  1
  •   Davide Ungari    15 年前

    应该足够了:

    \(.*\)
    

    在Java中,代码将是:

      String foo = "Foo(Bar)";
      Pattern pattern = Pattern.compile("\(.*\)");
      Matcher matcher = pattern.matcher(foo);
      while (matcher.find()) {
                int beginIndex=matcher.start();
                int endIndex=matcher.end();
                return foo.substring(beginIndex, endIndex);
    
        5
  •  0
  •   Dominic Rodger    15 年前

    您省略了相当多的信息:没有使用任何平台或语言,也没有显示您接收到的文本类型(即“foo”是静态的还是可以更改的)?“bar”是静态的吗?等等)。

    选择Ruby并假设“foo”是稳定的,您可以这样做:

    $ ruby -e 'p "Foo(Bar)"[/Foo\(([^)]*)\)/, 1]'
    "Bar"
    $