РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ и выражения, начинающиеся с начала строки или с разделителя

#regex #string

#регулярное выражение #строка

Вопрос:

Я хотел бы РЕГУЛЯРНОЕ выражение, которое выбирает только подстроку, которая либо начинается с начала строки, либо ей предшествует пробел или разделяющий символ. Как это работает?

Например,

[ _^]Smith

кажется, почти получилось!

Комментарии:

1. Нет, каретка ^ не является символом, это anchor и не должно быть в классе character.

Ответ №1:

 (^|[ _])Smith
  

^ (начало) или одно из [ _] , за которым следует Smith

( | является or оператором)

Комментарии:

1. @Manji: Спасибо. Помещение ^ внутрь [] , но не в начало, возможно, делает его буквальным. Я пробовал ([ _]|^)Smith без совпадения. Тем не менее, я получаю множество совпадений с [ _]Smith . Как так получилось?

2. @manji: C. Я использую regex.h и вызываю regexec и regcomp . Ваше предложение соответствует Java и Python (только что протестировал его), но не в моем приложении, что очень странно. Есть идеи, в чем дело?

3. Каждый язык имеет свои собственные функции регулярных выражений и синтаксис (похожие, но не одинаковые) ( regular-expressions.info/refflavors.html ).

4. @manji: Спасибо за ссылку, я проверю это как можно скорее. Это могло бы объяснить это.

5. @manji: Я пробовал разные вещи. ([ab]|[ _])Smith[ _,.] и ([ab]|[ _])Smith[ _,.] ничего не возвращают, но [ _]Smith[ _,.] возвращают. Возможно, C имеет свою собственную группу символов. Или есть флаги, которые блокируют их. Хм.

Ответ №2:

Что-то вроде этого:

 ^[ _]?Smith
  

^ — начало строки
[ _]? — пробел или подчеркивание 0 или один раз

Комментарии:

1. Спасибо. Я думал, ? имеется в виду соответствие нулю или одному из предыдущих выражений. В моем случае оно должно соответствовать единице.

2. Но есть 0, если строка начинается только с Smith, верно? Вы хотите просто сопоставить Smith ?