Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式:如何逃逸[]?_Java_Regex - Fatal编程技术网

Java 正则表达式:如何逃逸[]?

Java 正则表达式:如何逃逸[]?,java,regex,Java,Regex,我正在处理字符串,比如“[ro.multiboot]:[1]”。如何从该字符串中选择1(也可以是0) 我正在寻找Java中的正则表达式。通常,您会这样做(假设0和1是唯一的选项): 如果您只需要ro.multiboot的值,您可以将其更改为: ^.*\[ro.multiboot\].*\[([01])\].*$ (取决于不带括号的内容的复杂程度) 这两种方法基本上都只提取方括号之间的值(如果值为0或1),然后将其捕获到捕获变量中,以便您可以使用它 当然,regex不是一个全球标准,您使用它的环

我正在处理字符串,比如
“[ro.multiboot]:[1]”
。如何从该字符串中选择1(也可以是0)


我正在寻找Java中的正则表达式。

通常,您会这样做(假设0和1是唯一的选项):

如果您只需要ro.multiboot的值,您可以将其更改为:

^.*\[ro.multiboot\].*\[([01])\].*$
(取决于不带括号的内容的复杂程度)

这两种方法基本上都只提取方括号之间的值(如果值为0或1),然后将其捕获到捕获变量中,以便您可以使用它

当然,regex不是一个全球标准,您使用它的环境也不是。这意味着这在很大程度上取决于您的实际环境,您将如何实际编写代码


对于Java,以下示例程序可能会有所帮助:

导入java.util.regex.*

class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile("^.*\\[ro.multiboot\\].*\\[([01])\\].*$");
        String str;
        Matcher m;

        str = "[ro.multiboot]: [0]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str0 has " + m.group(1));
        }

        str = "[ro.multiboot]: [1]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str1 has " + m.group(1));
        }

        str = "[ro.multiboot]: [2]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str2 has " + m.group(1));
        }
    }
}
这导致(如预期的那样):


通常,您会这样做(假设0和1是唯一的选项):

如果您只需要ro.multiboot的值,您可以将其更改为:

^.*\[ro.multiboot\].*\[([01])\].*$
(取决于不带括号的内容的复杂程度)

这两种方法基本上都只提取方括号之间的值(如果值为0或1),然后将其捕获到捕获变量中,以便您可以使用它

当然,regex不是一个全球标准,您使用它的环境也不是。这意味着这在很大程度上取决于您的实际环境,您将如何实际编写代码


对于Java,以下示例程序可能会有所帮助:

导入java.util.regex.*

class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile("^.*\\[ro.multiboot\\].*\\[([01])\\].*$");
        String str;
        Matcher m;

        str = "[ro.multiboot]: [0]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str0 has " + m.group(1));
        }

        str = "[ro.multiboot]: [1]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str1 has " + m.group(1));
        }

        str = "[ro.multiboot]: [2]";
        m = p.matcher (str);
        if (m.find()) {
            System.out.println ("str2 has " + m.group(1));
        }
    }
}
这导致(如预期的那样):


@paxdiablo的regexp是正确的,但是“如何从这个字符串中选择1(也可以是0)”的完整答案是:

1.非常简单的解决方案
String input=“[ro.multiboot]:[1]”;
字符串匹配=input.replaceFirst(“^.\\[ro.multiboot\\].\\[([01])\\].*$”,“$1”);
2.功能相同,更复杂但性能更好
String input=“[ro.multiboot]:[1]”;
模式p=Pattern.compile(“^.\\[ro.multiboot\\\].\\[([01])\\].$”;
匹配器m=p.Matcher(输入);
字符串匹配=空;
如果(m.matches())matched=m.group(1);
性能更好,因为模式只编译一次(例如,当您匹配数组操作系统时,例如
String
s)

注意事项:

  • 在这两个示例中,组都是介于
    之间的regexp的一部分(如果未转义)
  • 在Java中,您必须使用
    \\[
    ,因为
    \[
    返回错误-
    字符串的转义序列不正确

    • @paxdiablo的regexp是正确的,但“如何从该字符串中选择1(也可以是0)”的完整答案是:

      1.非常简单的解决方案
      String input=“[ro.multiboot]:[1]”;
      字符串匹配=input.replaceFirst(“^.\\[ro.multiboot\\].\\[([01])\\].*$”,“$1”);
      
      2.功能相同,更复杂但性能更好
      String input=“[ro.multiboot]:[1]”;
      模式p=Pattern.compile(“^.\\[ro.multiboot\\\].\\[([01])\\].$”;
      匹配器m=p.Matcher(输入);
      字符串匹配=空;
      如果(m.matches())matched=m.group(1);
      
      性能更好,因为模式只编译一次(例如,当您匹配数组操作系统时,例如
      String
      s)

      注意事项:

      • 在这两个示例中,组都是介于
        之间的regexp的一部分(如果未转义)
      • 在Java中,您必须使用
        \\[
        ,因为
        \[
        返回错误-
        字符串的转义序列不正确

      您要为哪种语言寻找正则表达式?不同的语言和工具实现不同的正则表达式语法。此外,引号是字符串的一部分吗?您要为哪种语言寻找正则表达式?不同的语言和工具实现不同的正则表达式语法。此外,引号是字符串的一部分吗?