Wie verwende ich Word Break, Asterisk, Word Break in Regex mit Perl?

8

Ich habe einen komplexen vorkompilierten regulären Ausdruck in Perl. In den meisten Fällen ist der Regex in Ordnung und entspricht allem, was er sollte und nichts, was er nicht sollte. Außer einem Punkt.

Grundsätzlich sieht meine Regex wie folgt aus:

%Vor%

Leider stimmt m/\b\*\b/ nicht mit example, * überein. Nur m/\*/ wird tun, was ich wegen falscher Positives nicht verwenden kann. Gibt es eine Problemumgehung?

aus den Kommentaren - falsch positive Werte sind: ** , example* , exam*ple

Wofür ist die Regex gedacht? - Es sollte Schlüsselwörter (eines ist ein einzelnes Sternchen) extrahieren, die Mitarbeiter in Produktdaten eingegeben haben. Das Ziel besteht darin, diese Informationen aus einem Freetext-Feld in ein atomares Feld zu verschieben.

    
burnersk 04.02.2014, 15:28
quelle

3 Antworten

12

Es klingt so, als ob Sie * als Wortzeichen behandeln möchten.

%Vor%

entspricht

%Vor%

Sie wollen

%Vor%

angewendet, erhalten Sie Folgendes:

%Vor%

Aber angesichts unserer Kenntnis des mittleren Ausdrucks kann das folgendermaßen vereinfacht werden:

%Vor%     
ikegami 04.02.2014, 15:50
quelle
4

Das Problem ist, dass Perl * nicht als "Wortzeichen" betrachtet und somit keine Wortgrenze zwischen einem Leerzeichen und einem Sternchen erkennt (obwohl es eines zwischen ihnen erkennt) die r und die * in foobar* ).

Die Lösung besteht darin, zuerst zu entscheiden, was Sie tun möchten, dass "Wort" - und "Nicht-Wort" -Zeichen berücksichtigt werden, und dann explizit danach suchen. Zum Beispiel, wenn Sie möchten, dass Ihre Wörter nur aus den Buchstaben 'A' bis 'Z' (oder ihren Kleinbuchstaben) und * bestehen und alles andere als Nicht-Wort-Zeichen behandelt wird , können Sie verwenden:

%Vor%

Dies entspricht den Zeichenfolgen FOO , BAR oder * , vorausgesetzt, dass ihnen kein Zeichen vorangestellt oder gefolgt wird, das [A-Za-z*] entspricht.

Wenn Sie beispielsweise alles außer Leerzeichen als Nicht-Wort-Zeichen betrachten möchten, könnten Sie Folgendes verwenden:

%Vor%

, das mit FOO , BAR oder * übereinstimmt, vorausgesetzt, dass ihnen kein Leerzeichen vorangeht oder folgt.

    
Ilmari Karonen 04.02.2014 15:58
quelle
2

Wie wäre es mit:

%Vor%

In Aktion:

%Vor%

Ausgabe:

%Vor%     
Toto 04.02.2014 15:39
quelle

Tags und Links