wyrażenie regularne niepasujące częściowo do ciągu


0

Widziałem, że ktoś już zadał to pytanie, ale odpowiedź nie zadziałała w moim przypadku. Mam rejestrację o następującej strukturze:

/regexp/(?i:mktg)

aby uniknąć warunków wielkości znaków. Będę musiał zbudować to wyrażenie zawierające „mktg”, ale nie zawierające słów „okrągły” ORAZ „SMP” w żadnym przypadku. Ktoś chętny do pomocy? Próbowałem już /regexp/([^?i:SMP])i /regexp/^((?!SMP).)*$, ale nadal będą ciągnąć ten sznur.

dzięki,

Valeria


Spróbuj użyć tego testera wyrażeń regularnych .
AFH,

1
Jakie szalone narzędzie lub środowisko sprawia, że ​​stawiasz /regexp/przed wyrażeniem regularnym?
tripleee

Odpowiedzi:


0

AFAIK powinien wykonać zadanie:

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

Wyjaśnienie:

^           : 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

Przypadki testowe:

Match: mktg
Match: abc mktg xyz
No match: round mktg 
No match: SmP mktg 
No match: SPM ROUND 

(?i)^(?!.*(round|smp)).*?mktgmoże być bardziej wydajny
tripleee

@tripleee: Być może nie przeprowadziłem testu porównawczego.
Toto

Jestem skromny; unika cofania w porównaniu do twojego, ale oczywiście w tym odosobnionym przypadku prawdopodobnie nie ma to większego znaczenia.
tripleee
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.