POSIX-ERE: соответствует слову, но не заключенному в квадратные скобки

Я пытаюсь сопоставить вхождение слова «организация», но не тогда, когда оно находится в квадратных скобках:

Примеры строк:

Организация «[название организации]» должна содержать хотя бы одного пользователя на организацию. Идентификатор [id] для [организации] должен содержать только цифры

Я пытаюсь использовать:

(?:^|\s)(organization)(?!])

но единственный вариант, поддерживаемый в приложении, которое я использую, — это POSIX Extended Regex .


person user1298431    schedule 09.04.2018    source источник
comment
Вы пытаетесь заменить?   -  person revo    schedule 09.04.2018
comment
Скорее всего, инструмент, который вы используете, поддерживает возврат только того, что было захвачено. Попробуйте \[[^][]*]|\b(organization)\b. Чтобы удалить эти вхождения, используйте (\[[^][]*])|\borganization\b и замените на \1. Кстати, если это для AHK, он поддерживает PCRE, а не POSIX ERE.   -  person Wiktor Stribiżew    schedule 09.04.2018


Ответы (2)


появления слова «организация», но не в квадратных скобках

Самый короткий путь будет (?!<\[)(organization)(?!=\]).

Единственная разновидность, поддерживаемая в приложении, которое я использую, — это расширенное регулярное выражение POSIX.

Поскольку отрицательные обходы вам недоступны: ([^[]|^)(organization)([^]]|$).

Это не соответствует [organization и organization]; если вы хотите, чтобы он был успешным, когда отсутствует открывающая или закрывающая скобка, вы должны явно добавить эти случаи:

([^[]|^)(organization)([^]]|$)|\[(organization)([^]]|$)|([^[]|^)(organization)\]
person Simon Shine    schedule 09.04.2018
comment
На самом деле это соответствует организации в [название организации]. Так что не ответ. - person revo; 09.04.2018
comment
@revo: Хороший вопрос. Это не было точно указано, но я склонен предположить, что этого не должно быть. - person Simon Shine; 09.04.2018
comment
Хотя это не входит в данный образец ввода, первое предложение является общим. - person revo; 09.04.2018

Да, вы правы, вхождения в скобках не должны совпадать

Спасибо вам за помощь! Я, наконец, использовал этот вариант:

([^\[]|^)(organization)([^\]]|$)

Мне пришлось избежать [ в диапазоне

person user1298431    schedule 09.04.2018