Техника, которую нужно использовать, когда вы хотите исключить и избежать [называется «отрицательный взгляд позади».
Например,
(?<!\\)\[
Это регулярное выражение будет соответствовать [но игнорируется, если егозатем \
Дайте мне знать, если вам нужна дополнительная помощь
Правка # 1
Это отрицательный взгляд, примененный к вашему конкретному сценарию
\[fn:\d+](?:\\\[|[^[])*
и в php это становится
if (preg_match('/\[fn:\d+\](?:\\\\\[|[^[])*/', $subject)) {
# Successful match
} else {
# Match attempt failed
}
Некоторые примечания
- Я использую чередование и позволяю ему сначала соответствовать экранированному [поэтомуисключить из-за того, что соответствует после чередования (общий прием, основанный на чередовании чередования)
- Я начал с нуля, поэтому, если вам нужно захватить некоторые группы, добавьте круглые скобки, где это необходимо
- Конструкция(? :) используется для группировки, но не для захвата.Это (возможно) более эффективно, и, как я уже сказал, я пропустил захват
Регулярное выражение проверено на вашем примере.Дайте мне знать, если вы можете заставить его работать сейчас
Удачи, Бакли