正则表达式匹配多行示例– Java

默认情况下,“。” 与换行符不匹配。 要匹配多行,请添加(?s)前缀或启用Pattern.DOTALL标志。

1.例子

一个地址样本,我们只需要提取“地址1”。

Starting...
Address 1: 88 app 2/8
	superman taman, puchong
	36100, Malaysia
Address 2: abc
End

失败:
要提取“地址1”,此模式将不返回任何内容,即“。”。 与多行不匹配。

Address 1:\\s(.*)Address 2:

正确的:
要提取“地址1”,请添加(?s)前缀。

(?s)Address 1:\\s(.*)Address 2:

或启用Pattern.DOTALL模式。

Pattern.compile(Address 1:\\s(.*)Address 2:, Pattern.DOTALL);

2. RegEx示例

使用正则表达式多行匹配以获取“地址1”的示例。

package com.mkyong.regex

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RunExampleTest{
	
	private Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN);
	private Matcher matcher;

	//Alternative
	/*private Pattern addressPattern = 
		Pattern.compile(ADDRESS_PATTERN, Pattern.DOTALL);*/

	private static final String ADDRESS_PATTERN = "(?s)Address 1:\\s(.*)Address 2:";
	
	public static void main(String[] args) {
	
		String data = "Testing... \n" +
			"Address 1: 88 app 2/8\n" +
			"superman taman, puchong\n" +
			"36100, Malaysia\n" +
			"Address 2: abc" +
			"testing end";
		
		RunExampleTest obj = new RunExampleTest();
		List<String> list = obj.getAddress(data);
		
		System.out.println("Test Data : ");
		System.out.println(data + "\n");
		
		System.out.println("Address Resut : " + list);
		
	}
	
	private List<String> getAddress(String data){
		
		List<String> result = new ArrayList<String>();
		
		matcher = addressPattern.matcher(data);

		while (matcher.find()) {
			result.add(matcher.group(1));
		}
		
		return result;
	}
	
}

输出量

Test Data : 
Testing... 
Address 1: 88 app 2/8
superman taman, puchong
47100, Malaysia
Address 2: abctesting end

Result : [88 app 2/8
superman taman, puchong
47100, Malaysia
]

参考文献

  1. Emacs多行正则表达式示例
  2. 维基百科:正则表达式/

翻译自: https://mkyong.com/regular-expressions/regular-expression-matches-multiple-line-example-java/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值