#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
?