1

ich die REGEX Bibliothek bin mit wie hier definiert http://userguide.icu-project.org/strings/regexpHPCC ECL REGEX Lookarounds back-to-back-Werte

That being said ich ein bestimmtes Problem haben würde Ich mag regex verwenden zu korrigieren.

Input := '!Tim !~ Dan~'; 
Output := Tim !~ Dan 

REGEXREPLACE('((?<![!])~)' ,Input,' '); //Results in : !Tim !~ Dan 
REGEXREPLACE('((?![~])!)|((?<![!])~)',Input,' '); //Results in : Tim ~ Dan 

Was ist mit dieser Aussage verursacht die! nach dem ~ zu entfernen?

Wie entferne ich alles! und ~ ohne die Kombination von! ~ in einem einzigen Regex-Befehl zu entfernen.

BONUSPUNKTE, wenn Sie mir sagen können, wie man macht! ~! in einem einzigen Befehl arbeiten.

Danke !!

Antwort

1

können Sie die folgende regex verwenden:

(!~)|[!~] 

und mit $1 Rückreferenzierung ersetzen. Siehe die regex demo.

Einzelheiten:

  • (!~) - passend und fängt in Gruppe 1 eine !~Sequenz von Zeichen
  • | - oder
  • [!~] - einem einzigen ! oder ~ Charakter

Die Backreference $1 fügt den in Gruppe 1 gespeicherten Wert wieder in die resultierende Zeichenfolge ein.

+0

Also im Grunde sagt, Ersetzen Sie alles in Gruppe 1 mit sich selbst und alles außerhalb der Gruppe mit einer leeren Zeichenfolge. Ich hätte gedacht, dass $ 1 jede Instanz des Zeichensatzes ersetzt hätte. Warum ist das nicht der Fall? –

+0

'$ 1' ist eine [* nummerierte Rückreferenz *] (http://www.regular-expressions.info/replacebackref.html). Es bezieht sich auf den Text, der mit der entsprechenden Erfassungsgruppe im Muster erfasst wurde. A [* capturing group *] (http://www.regular-expressions.info/brackets.html) ist ein Paar nicht umrandeter Klammern innerhalb eines Musters. –

+0

Okay, es ist erwähnenswert für andere, dass (! ~) | [! ~] Nicht andersherum referenziert werden kann, da sonst die Zeichen aus dem Satz ersetzt werden, bevor die Gruppe gefunden wird. –