- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class TestUtil {
public static void main(String[] args) {
StringBuffer test = new StringBuffer();
test.append("abacbsidfslhfadskljfhdskh adsfkjlhdslkfhas lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds glakdshgf dghkads ghklgh asdflkghadfkl <p rendition=\"#indent-1\">1. Geschl. <hi rendition=\"#r\"> <hi rendition=\"#smcap\"> <hi rendition=\"#wide\"><term xml:lang=\"la\">Homo</term></hi> </hi>. <term xml:lang=\"la\">Erectus</term>, <term xml:lang=\"la\">bimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>");
test.append("bbbbbbbbbbbbbbbbbbbbbb <p rendition=\"#indent-1\">1. Geschl. <hi rendition=\"#r\"> <hi rendition=\"#smcap\"> <hi rendition=\"#wide\"><term xml:lang=\"la\">sHomo</term></hi> </hi>. <term xml:lang=\"la\">sErectus</term>, <term xml:lang=\"la\">sbimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>");
Pattern pattern = Pattern.compile("<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
Matcher regexMatcher = pattern.matcher(test.toString());
System.out.println(test);
test.delete(0, test.length());
while (regexMatcher.find()) {
// test.delete(regexMatcher.start(),test.length());
String matched =regexMatcher.group(0);
Pattern termPatter=Pattern.compile("(<term xml:lang=\".*?\")(>)(.*?)(</term>)");
Matcher termMatcher = termPatter.matcher(matched);
if(termMatcher != null){
//termMatcher.start();
System.out.println(termMatcher.groupCount());
while (termMatcher.find()) {
System.out.println("0---"+termMatcher.group(0));
System.out.println(termMatcher.group(1));
System.out.println(termMatcher.group(2));
System.out.println(termMatcher.group(3));
System.out.println(termMatcher.group(4));
termMatcher.appendReplacement(test, appendSortKey(termMatcher.group(0),termMatcher.group(1),termMatcher.group(2),termMatcher.group(3),termMatcher.group(4)));
}
termMatcher.appendTail(test);
}
//regexMatcher.appendTail(test);
}
System.out.println(test);
}
private static String appendSortKey(String totStr, String termStart, String termStartEndTag, String termValue, String termEndTag) {
// TODO Auto-generated method stub
if(totStr!=null){
termStart = termStart+" "+"sortKey=\""+termValue+"\""+termStartEndTag;
return termStart+termValue+termEndTag;
}
return null;
}
}
尝试仅通过从另一个正则表达式的匹配器获取内容(因为它是条件)来操作 < term>..... 但在开始和结束时丢失了内容,请让我知道我的错误我正在做。
预期输出是
abacbsidfslhfadskljfhdskh adsfkjlhdslkfhas lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds glakdshgf dghkads ghklgh asdflkghadfkl <p rendition="#indent-1">1. Geschl. <hi rendition="#r"> <hi rendition="#smcap"> <hi rendition="#wide"><term xml:lang="la" sortKey="Homo">Homo</term></hi> </hi>. <term xml:lang="la" sortKey="Erectus">Erectus</term>, <term xml:lang="la"sortKey="bimanus" >bimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>bbbbbbbbbbbbbbbbbbbbbb <p rendition="#indent-1">1. Geschl. <hi rendition="#r"> <hi rendition="#smcap"> <hi rendition="#wide">><term xml:lang="la" sortKey="sHomo">sHomo</term></hi> </hi>. <term xml:lang="la" sortKey="sErectus">sErectus</term>, <term xml:lang="la"sortKey="sbimanus" >sbimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>
最佳答案
您更改以下代码行,它将给出正确的结果。
Pattern pattern = Pattern.compile(".*<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
/*
instead of the following
Pattern pattern = Pattern.compile("<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
*/
说明:
<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>
部分匹配<p ...> ... </p>
部分,因此 appendReplacement 仅附加 <p ...> ... </p>
部分替换。.*<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>
部分将匹配 Text <p ...> ... </p>
,因此在 appendReplacement 之后,您将得到 Text <p ...> ... </p>
与替代品。 因此输出将是整个字符串 <term xml:lang="la">text</term>
被替换为<term xml:lang="la" sortKey="text">text</term>
关于java - 匹配器。 appendReplacement 未添加起始内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186060/
public class TestUtil { public static void main(String[] args) { StringBuffer test = new
public static void main(String[] args) { Pattern p = Pattern.compile("((?:[a-zA-Z]\\.)+[s]$)
正则表达式中的3组: 模式 = (a)(b)123(c) 我需要摆脱 a,b,c 在 Java 中: while (matcher.find()) { matcher.appendReplacem
我正在使用 Matcher.appendReplacement()在我的替换字符串中有 $2 之前,它工作得很好: Note that backslashes ( \ ) and dollar sig
我正在使用 jdk1.7.0_79 尝试用 Matcher 替换一些文本。我大量使用了 Matcher.appendReplacement() 和 Matcher.appendTail(),当我没有设
java Matcher.appendReplacement() 方法(带有 appendTail())应该可以让我将源文本转换为结果文本,同时替换所有出现的模式。伪语言中的算法类似于: while
我有一个字符串 s 和一个正则表达式。我想用替换字符串替换 s 中正则表达式的每个匹配项。替换字符串可能包含一个或多个反斜杠。为了执行替换,我使用了 Matcher 的 appendReplaceme
这是在 Adroid 4.2.2 上运行的。将正则表达式模式和匹配器与 appendReplacement() 结合使用。它所做的是用一些自定义数据替换从远程源接收的 html 字符串中的一些占位符。
是否有 Matcher.appendReplacement() 和 Matcher.appendTail() 的替代方案,它采用 StringBuilder 而不是 StringBuffer ? 是否
更新 这是我想出的。我还没有测试它,因为它是仍然需要移植的更大代码段的一部分。 你能看到任何看起来不合适的东西吗? private const string tempUserBlock = "%%%C
我是一名优秀的程序员,十分优秀!