regulärer Ausdruck, der teilweise nicht mit einer Zeichenfolge übereinstimmt

0

Ich habe gesehen, dass bereits jemand diese Frage gestellt hat, aber die Antwort hat in meinem Fall nicht funktioniert. Ich habe eine Reg-Exp wie folgt aufgebaut:

/regexp/(?i:mktg)

Zeichen Fallbedingungen zu vermeiden. Ich muss diesen Ausdruck aufbauen, der "mktg" enthält, aber in keinem Fall die Wörter "round" UND "SMP" enthält. Jemand bereit zu helfen? Ich habe es schon versucht /regexp/([^?i:SMP])und /regexp/^((?!SMP).)*$, aber die werden immer noch an dieser Schnur ziehen.

Vielen Dank,

Valeria

Valeria Raciti
quelle
Versuchen Sie es mit diesem Tester für reguläre Ausdrücke .
AFH
1
Welches verrückte Werkzeug oder Umfeld bringt Sie dazu, sich /regexp/Ihrer Regex zu stellen?
Tripleee

Antworten:

0

AFAIK das sollte die Arbeit machen:

^(?i)(?=.*mktg)((?!round|smp).)*$

Erläuterung:

^           : beginning of line
(?i)        : case insensitive
(?=         : start lookahead, zero-length assertion, make sure we have
  .*        : 0 or more any character
  mktg      : literally "mktg"
)           : end lookahead
(           : start group
  (?!       : start negative lookahead, zero-length assertion, make we DON'T have:
    round   : literally "round"
    |       : OR
    smp     : literally "smp"
  )         : end lookahead
  .         : any character
)*          : group must be repeated 0 or more times
$           : end of line

Testfälle:

Match: mktg
Match: abc mktg xyz
No match: round mktg 
No match: SmP mktg 
No match: SPM ROUND 
Toto
quelle
(?i)^(?!.*(round|smp)).*?mktgkönnte effizienter sein
Tripleee
@tripleee: Möglicherweise habe ich noch keinen Benchmark durchgeführt.
Toto
Ich bin bescheiden. es vermeidet das Zurückverfolgen im Vergleich zu Ihrem, aber in diesem Einzelfall spielt es wahrscheinlich keine Rolle.
Tripleee