Autor Zpráva
Gray blogger
Profil *
Zdravím,
chtěl bych se zeptat jestli byste mi neporadili s napsáním regulárního výrazu. Je fakt, že PHP už nepoužívám, pracuji v Delphi, ale používám knihovnu, která používá podobná pravidla jako v PHP. Tedy konkrétní přehled přepínačů/options, které mám v té knihovně dostupný je zde: www.yunqa.de/delphi/products/regex/syntax

A teď o co se snažím. Mám větu nebo několiv vět, kde se nachází závorky. Uvnitř jsou uvedené jazyky. Obrazně si to můžeme rozdělit na jednotlivé bloky oddělené znaky ;\., ... Co mě zajímá jsou ty jazyky. Před názvem jazyka i za může být string, pojmenujme ho something a končí oddělovačem: Phoenician|Assyrian|Arabic|Sabean|Ethiopic . Všechny jazyky chci smazat včetně těch řetězců co jsou mezi ním a oddělovačem. Ale problém je v tom, že jazyk Aramaic smazat nechci. Také se tam může vyskytnout tag <em>something</em> a ten taky smazat nechci.

Mám tedy takovýto regex:
(*UCP)([;\.,]).*?(Phoenician|Assyrian|Arabic|Sabean|Ethiopic).*?(?!Aramaic|<em>.*?</em>).*?([;\.])
a nahrazuji ho za: '$1$3', mělo by být '$1$3$4', ale to mi nefunguje (do výsledku přidá '$4'.

Zdrojový text:
SOMETHING MAY INCLUDE TAGS (Phoenician something, Assyrian something, Arabic @, Sabean , Ethiopic @ Aramaic something, @ — absolute $ 47t.; construct$; ; something  $ +; $ + ( something); something $ +; something  ... (<em>something</em>, Assyrian <em>KEEP THIS</em></i> Dl, AGI.)

Výsledný text po záměně:
SOMETHING MAY INCLUDE TAGS (Phoenician something,.;.)"
(Pozn. testuju to bez toho textu co je označen jako italic, protože mi Delphi nechce pustit delší text do 'string literals'.)


Co bych tedy chtěl dostat je něco takového:
SOMETHING MAY INCLUDE TAGS (<em>Ethiopic @Aramaic something</em>, <em>KEEP THIS</em>)"

nebo var 2. (která ale není reálná kvůli omezenosti PCRE)
SOMETHING MAY INCLUDE TAGS (Aramaic something (<em>something</em>, <em>KEEP THIS</em>)"


Oprava:
Co bych tedy chtěl dostat je něco takového:
SOMETHING MAY INCLUDE TAGS (Ethiopic @Aramaic something, <em>KEEP THIS</em>)"

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0