Portál AbcLinuxu, 1. května 2025 13:01
Snažím se vymyslet regexp, který by detekoval ampersand, který není součástí HTML entity. HTML entitou myslím > a další, což se dá nejspíše vyjádřit jako &[a-z]+;
. Ale jak to dát dohromady do dotazu, najdi takové ampersandy, za kterými nic takového nenásleduje? Ja mám pocit, že to snad ani vyjádřit nejde. Pokud jde o syntaxi, zde je její popis.
Tiskni
Sdílej:
&[^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
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.