You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则如何匹配包含换行的任意非空完整字符串?

Java 正则替代PHP \X 匹配多行字符串方案

核心需求说明

PHP正则中的\X标记可匹配包含换行在内的所有字符,实现任意非空多行字符串的完整匹配,但Java原生不支持\X标记,可通过以下方案实现同等效果。
你给出的待匹配示例字符串如下:

This is a 
multi-line
string with some charakters like $ and / and ´
to match fully.

方案1:匹配完整非空多行字符串

该方案可将整段多行字符串作为1个结果匹配,符合你给出的示例要求。
Java正则的元字符.默认不匹配换行符,只需开启DOTALL(也称s修饰符)模式即可让.匹配包括换行在内的所有字符,结合+限定非空即可:

  • 写法1:正则内嵌入修饰符,写法为(?s).+
  • 写法2:编译正则时显式指定Pattern.DOTALL参数,正则写为.+

代码示例:

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

public class MultiLineMatchTest {
    public static void main(String[] args) {
        String targetStr = "This is a \n" +
                "multi-line\n" +
                "string with some charakters like $ and / and ´\n" +
                "to match fully.";

        // 嵌入修饰符写法
        Matcher matcher1 = Pattern.compile("(?s).+").matcher(targetStr);
        if (matcher1.find()) {
            // 输出完整的多行字符串,仅1个匹配结果
            System.out.println("匹配结果:\n" + matcher1.group());
        }

        // 显式指定DOTALL参数写法
        Matcher matcher2 = Pattern.compile(".+", Pattern.DOTALL).matcher(targetStr);
        if (matcher2.find()) {
            System.out.println("匹配结果:\n" + matcher2.group());
        }
    }
}

方案2:等价\X语义匹配单个Unicode字素簇

如果你需要的是和\X原始语义完全一致的单个Unicode字素簇匹配(比如带音调的特殊字符整体匹配),可使用正则\P{M}\p{M}*+实现:

  • \P{M}匹配任意非标记类Unicode字符
  • \p{M}*+匹配0个或多个标记类Unicode字符,使用占有量词避免回溯
    如果要匹配整段非空的字素簇序列,可写为(?:\P{M}\p{M}*+)+,开启DOTALL模式也可兼容换行。

内容的提问来源于stack exchange,提问作者Harper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 16:30:00