Portál AbcLinuxu, 1. května 2025 12:49
&[^a-z]+ | &$
buď je za ním alespoň jedno nepísmeno nebo je na konci řetězce
&[^a-z]+[^;] | &.$ | &$
jestli to není dobře, tak už dál hádat nebudu &(?![a-zA-Z][a-zA-Z0-9]+;|#[0-9]+;|#[xX][a-fA-F0-9]+;)a ak nema kontrolovat spravnost ciselnych entit, tak postacuje
&(?!#?[a-zA-Z0-9]+;)
(?!…)
když je to přímo v java.util.regex
je asi nejlepší. Bez vyhlížení to IMHO nepůjde zapsat jako jedno porovnání a muselo by se to udělat nadvakrát.
Zkusil bych něco takovýho:
(&)[^;]*[[:space:]]
(shoda v prvním podřetězci je přesně ten hledaný &)
IMHO tam musíš mít nějakej oddělovač, kterej ti určí, kdy končí entita (v mé "ukázce" jsem tam dal jenom bílé znaky, ale tu množinu lze samozřejmě rozšířit), jinak to není regulární jazyk.
Teda abych se vyjádřil lépe - oddělovač, kdy už to nemůže být entita.
Tidy tidy = new Tidy(); // Configuration tidyconfig = new Configuration(); tidy.setXHTML(true); tidy.setXmlOut(true); // tidy.setXmlPIs(true); tidy.setXmlPi(true); tidy.setMakeClean(true); tidy.setAltText(""); tidy.setPrintBodyOnly(true); tidy.setFixUri(true); tidy.setWord2000(true); tidy.setDropFontTags(true); tidy.setSmartIndent(true); tidy.setInputEncoding("utf-8"); tidy.setOutputEncoding("utf-8"); // tidy.setHideComments(true); // tidy.setXmlTags(true); tidy.setShowWarnings(false); InputStream inputStream = new BufferedInputStream( new FileInputStream(ConvertedFileName)); OutputStream zeroout = new ByteArrayOutputStream(); org.w3c.dom.Document ThisDocument = tidy.parseDOM(inputStream, zeroout); if(ThisDocument == null) { System.err.println("Document nejde opravit......"); // vlozit, jak je } else { // nejam vlozit dane xml - print pretty xml/xhtml, tisk vnitrku xml znacky..... }bye gf
s/&(?<!#?[a-zA-Z0-9]+;)/&/g
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.