java 正则表达式 字符序列

标签 java regex sequence

我有一个字符串,里面有多个“消息”。 “消息”以特定的字符序列开头。我试过:

String str = 'ab message1ab message2ab message3'
Pattern pattern = Pattern.compile('(?<record>ab\\p{ASCII}+(?!ab))');
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    handleMessage(matcher.group('record'))
}

但是\p{ASCII}+贪吃一切。 符号ab可以在消息内部,仅它们的顺序意味着下一条消息的开始

最佳答案

p{ASCII}+ 是一个或多个 ASCII 字符的贪婪正则表达式,这意味着它将使用最长的可能匹配。但如果您想要尽可能短的匹配,则可以使用不情愿量词:p{ASCII}+?。在这种情况下,您应该使用前瞻断言。

正则表达式可能会变成:

Pattern pattern = Pattern.compile("(?<record>ab\\p{ASCII}+?)(?=(ab)|\\z)");

请注意 (ab)|\z 以匹配最后一条消息...

关于java 正则表达式 字符序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866168/

相关文章:

Java - 根据两个属性值对 JSONArray 进行排序

java - Java中存储多个线程

java - Android 中两个 TextView 发生冲突

JavaScript 正则表达式 : Non-Digit Character

r - 检测有序字符串的序列并使用 R 对它们进行分组

java - 在哪里可以找到 Java 中基于标准 Trie 的 map 实现?

javascript - 正则表达式获取 () 之间的字符串

java - 匹配具有特定扩展名的所有文件名,特定文件名正则表达式除外

c# - 将一系列项目添加到列表的开头?

R 在组内跨行连接但保留序列