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中,您必须使用
,因为\\[
返回错误-\[
字符串的转义序列不正确