在Java的字符串处理场景中,有时需要同时按照多种规则拆分字符串,比如既要按数字作为边界分割,也要按特定字符组合LM作为边界分割,这时候就可以使用正则表达式的OR条件来实现多规则匹配分割。

正则表达式中OR条件的基本用法
正则表达式中用竖线|表示OR条件,意思是匹配竖线左右任意一侧的规则即可。如果我们需要同时匹配数字和LM两种边界,就可以把对应的匹配规则用|连接起来。
数字和LM的匹配规则说明
- 匹配数字可以使用
d,如果是作为边界拆分,需要结合边界标识,比如(?<=d)|(?=d)表示数字的前后位置作为分割点 - 匹配LM字符组合直接使用
LM即可,同样作为边界的话可以用(?<=LM)|(?=LM)表示LM的前后位置作为分割点
实现按数字或LM边界分割的完整示例
我们可以把两种边界规则用OR条件组合,作为String.split()方法的参数,就能实现同时按两种边界拆分字符串的效果。下面是完整的代码示例:
import java.util.Arrays;
public class SplitDemo {
public static void main(String[] args) {
// 测试字符串,包含数字、LM字符组合
String testStr = "abc123LMdef45LM678ghi";
// 正则规则:匹配数字的前后边界 或者 LM的前后边界
// (?<=d) 表示数字后面的位置,(?=d) 表示数字前面的位置
// (?<=LM) 表示LM后面的位置,(?=LM) 表示LM前面的位置
// | 表示OR条件,满足任意一侧规则就作为分割点
String regex = "(?<=d)|(?=d)|(?<=LM)|(?=LM)";
String[] result = testStr.split(regex);
// 输出分割后的结果
System.out.println("原始字符串:" + testStr);
System.out.println("分割后结果:" + Arrays.toString(result));
}
}
代码运行结果说明
上述代码运行后,输出的结果如下:
原始字符串:abc123LMdef45LM678ghi 分割后结果:[abc, 123, LM, def, 45, LM, 678, ghi]
可以看到字符串按照数字的边界和LM的边界完成了拆分,数字部分、LM部分和其他字符部分都被单独拆分出来,符合我们的预期需求。
注意事项
- 正则中的边界匹配需要使用零宽断言
(?<=...)和(?=...),这类断言不会消耗字符,只会匹配位置,避免拆分时丢失字符 - 如果不需要保留LM字符在结果中,可以调整正则规则,比如把LM本身作为匹配项而不是边界,正则可以写成
d+|LM|[a-zA-Z]+,根据需求灵活调整即可 - 使用
split()方法时,如果正则匹配到开头或结尾的边界,可能会产生空字符串元素,可以通过过滤空字符串的方式处理
正则的OR条件可以灵活组合多种匹配规则,除了数字和LM之外,还可以扩展其他匹配规则,满足更多复杂的字符串分割场景。