Есть ли лучший способ написать регулярное выражение, чтобы соответствовать случаю, - PullRequest
2 голосов
/ 30 мая 2019

Я пытаюсь построить регулярное выражение, которое будет отбрасывать строку, если она совпадает.

Пример: отбросить строку, если она начинается с буквенных квадратных скобок []

I 'Я попытался прочитать несколько статей в Интернете для решения этой проблемы и создал регулярное выражение, которое действительно работает для меня

У меня следующий абзац:

[Hello] How are you
Doing
 Hope you have a nice day!
[goodbye] cya 
Take care

Используемое мной регулярное выражениеis /^(?!\[.?\])/

Результат, как и ожидалось, я хочу знать, есть ли лучший способ сопоставить его?enter image description here

1 Ответ

1 голос
/ 31 мая 2019

Шаблон ^[^\[.?\]] здесь неправильный, поскольку последовательность шаблонов заключена в класс символов. ^[^\[.?\]] соответствует любому символу, но [, ., ?, ] в начале строки. Вам необходимо сопоставить любую строку, которая начинается с последовательности символов, [, затем любое число символов до ].

Чтобы сопоставить строку в Ruby, которая не начинается с подстроки [...], вы можете использовать

^(?!\[[^\]\[]*]).*
^(?!\[.*?]).*

См. Rubular demo и последний график регулярных выражений :

enter image description here

подробности

  • ^ - начало строки
  • (?!\[.*?]) - отрицательный прогноз, который не дает совпадения, если сразу справа * есть [, любые 0+ символов, кроме символов разрыва строки, настолько малы, насколько это возможно, а затем ] (примечание [^\]\[]* соответствует 0+ символов, отличных от [ и ], и может быть предпочтительным, если между [...])
  • .* - любые 0+ символов, кроме символов разрыва строки.
...