我正在处理像"[ro.multiboot]: [1]"
这样的字符串。如何从这个字符串中选择1(它也可以是0)?
我正在寻找Java中的正则表达式。
答案 0 :(得分:4)
通常,你会做类似的事情(假设0和1是唯一的选择):
^.*\[([01])\].*$
如果您只想要ro.multiboot
的值,可以将其更改为:
^.*\[ro.multiboot\].*\[([01])\].*$
(取决于任何非括号内的东西的复杂程度)。
如果它们为零或一,它们基本上只提取方括号之间的值,并将其捕获到捕获变量中,以便您可以使用它。
当然,正则表达式不是世界范围的标准,也不是您使用它的环境。这意味着它在很大程度上取决于您的实际环境,以便您实际编写代码。
对于Java,以下示例程序可能有所帮助:
import 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));
}
}
}
这导致(如预期的那样):
str0 has 0
str1 has 1
答案 1 :(得分:0)
@ paxdiablo的正则表达式是正确的,但完整的答案是“如何从这个字符串中选择1(它也可以是0)?”是:
String input = "[ro.multiboot]: [1]";
String matched = input.replaceFirst( "^.*\\[ro.multiboot\\].*\\[([01])\\].*$", "$1" );
String input = "[ro.multiboot]: [1]";
Pattern p = Pattern.compile( "^.*\\[ro.multiboot\\].*\\[([01])\\].*$" );
Matcher m = p.matcher( input );
String matched = null;
if ( m.matches() ) matched = m.group( 1 );
性能更好,因为模式只编译一次(例如,当您匹配数组操作符String
s)时;
备注:强>
(
和)
之间的正则表达式的一部分(如果没有转义)\\[
,因为\[
返回错误 - 它不是String
的正确转义序列