gpt4 book ai didi

java - 通过结合前瞻和后视,使用正则表达式在java中分割字符串

转载 作者:行者123 更新时间:2023-12-01 21:20:38 27 4
gpt4 key购买 nike

我想使用正则表达式在java中分割一个字符串,但我想从前面和后面匹配它,以免丢失任何字符串。

例如:

test <img border=\"0\" src=\"test\" />hi<img border=\\\"0\\\" src=\\\"test\\\" /> test3"

我有上面的字符串,预期输出应该是:

预期输出:

test 
<img border=\"0\" src=\"test\" />
hi
<img border=\"0\" src=\"test\" />
test3"

以下是我尝试过的

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

public class TestParse {

private static final String IMG_S_LookBehind = "(?<=\\>)";
private static final String IMG_S_LookAHead = "(?=<img .*?\\>)";

static String test = "test <img border=\"0\" src=\"test\" />hi<img border=\\\"0\\\" src=\\\"test\\\" /> test3";

static Pattern newPattern(String tag) {
return Pattern.compile(String.format("(<%s\\s*([^>]*)>)(.*)(</%s>)", tag, tag));
}

public static void main(String[] args) {
// Pattern re = newPattern("b");
// Matcher m = re.matcher(test);
//
// if (m.matches()) {
// for (int i = 0; i <= m.groupCount(); i++) {
// System.out.printf("[%d]: [%s]\n", i, m.group(i));
// }
// }
String[] split = test.split(IMG_S_LookAHead);
System.out.println(split);
}
}

输出:

 test 
<img border=\"0\" src=\"test\" />hi
<img border=\"0\" src=\"test\" /> test3"

我也尝试从后面看,但不知何故它无法给我预期的输出。任何有关这方面的线索将不胜感激。

最佳答案

我不会通过正则表达式分割来解决这个问题,因为很难表达/检测标签和非标签之间的边界等。相反,我会尝试匹配标签或任何不是标签的东西。这是一个工作示例脚本:

String input = "test <img border=\"0\" src=\"test\" />hi<img border=\\\"0\\\" src=\\\"test\\\" /> test3";
String pattern = "<[^>]+>|((?!<[^>]+>).)*";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find( )) {
System.out.println(m.group(0));
}

打印:

test 
<img border="0" src="test" />
hi
<img border=\"0\" src=\"test\" />
test3

也许需要解释正则表达式的一部分:

((?!<[^>]+>).)*

这将匹配任何内容,只要它不遇到标签的开头。这个技巧被称为“回火点”,因为它实际上只是 .*,并在每个步骤中进行检查以确保标签不相交。

关于java - 通过结合前瞻和后视,使用正则表达式在java中分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58850188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com