Regex для соответствия целой строке, только если это испытывает недостаток в данной подстроке/суффиксе

Я искал вопросы как это, но все случаи, которые я нашел, были решены определенным для проблемы способом, как использование! g в vi для отрицания соответствий regex или соответствия другим вещам, без regex отрицания.

Таким образом я интересуюсь “чистым” решением этого:

Наличие ряда строк, я должен отфильтровать их с регулярным выражением matcher так, чтобы это только уехало (соответствует) строкам, испытывающим недостаток в данной подстроке. Например, отфильтровывание "Нечто" в:

Boo
Foo
Bar
FooBar
BooFooBar
Baz

Привел бы к:

Boo
Bar
Baz

Я пытался создать его с отрицательным взглядом aheads/behinds (?!regex)/(?<!regex), но не мог понять это. Это даже возможно?

8
задан Jason Williams 6 January 2011 в 10:51
поделиться

1 ответ

Попробуйте это регулярное выражение:

^(?:(?!Foo).)*$

Оно будет потреблять по одному символу за раз и проверит, нет ли впереди Foo. То же самое можно сделать и с отрицательным знаком:

^(?:.(?<!Foo))*$

Но вы также можете сделать то же самое без ссылок:

^(?:[^F]*|F(?:$|[^o].|o(?:$|[^o])))*$

Это соответствует любому символу, за исключением F или F, за которым либо не следует o, либо если за ним следует o, за которым не следует другой o.

.
19
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: