2014-02-18 3 views
2

Предположим, у меня есть большой абзац, в котором есть слова, как foundfieldfailedfiredkilled (так много негативных слов я знаю !!)Matching WORD шаблон через регулярное выражение

Теперь я хочу, чтобы принести линию которые слова, начиная сfihi или k и заканчиваетсяeld или ed

Как бы я начал искать этот шаблон слова в строке .... ??

держать в узде , что я прошу о шаблоне слово в строке, а не строка шаблона

Эти 2, конечно, не работал

egrep "^(f[ai]|k)+(eld|ed)$" 

и

egrep "\<(f|k)+(eld|ed)$\>" 

Я я признаю, что я не гроза regex, делая это из основного понимания, поэтому любой желающий предлагает лучший способ (с некоторым описанием) также приветствуется! :)

ответ

2

Регулярное выражение вы вероятно, будет

"\b([fh]i|k)\w*(eld|ed)\b" 

\w* должен быть эквивалентен [a-zA-Z0-9_]*, так что любые текстовые символы должны находиться между запрошенными строками.

\b существует, чтобы гарантировать, что слово действительно начинается и заканчивается буквами, которые вы хотите. В противном случае вы могли бы, например, строка соответствия, которая содержит слово Unfailed

Кроме того, необходимо удалить $ и ^ из регулярных выражений, потому что $ означает конец строки и ^ начало строки.

+0

совершенное объяснение mate .... + 1 :) – NoobEditor

+0

принято для ловли '$' и '^' использования .... bang on, thanks fella !! :) – NoobEditor

+0

Добро пожаловать. Регулярные выражения являются удивительными: -] – Jendas

2

Я хотел бы использовать

\<(fi|hi|k)[a-zA-Z]*?(eld|ed)\> 

, чтобы соответствовать слова, которые вы хотите.

demo @ regex101
(если вы посмотрите на демо: \b такое же, как \<

Пояснение:

\<   #beginning of word 
    (fi|hi|k) #either fi or hi or k 
    [a-zA-Z]*? #zero to unlimited of a-z and A-Z 
    (eld|ed) #either eld or ed 
\>   #end of word 

Если вы хотите, чтобы цифры, дефис, подчеркивание ... в ваших словах, просто добавьте их в класс символов, например: [a-zA-Z$_], если вы хотите разрешить также $ и _.

+0

+1: dint знал regex101, быстрый вопрос: когда я должен использовать '\ < \>' ?? – NoobEditor

+0

@NoobEditor только что обновил мой ответ :) –

1

Вы можете использовать границу слова \b.

^.*\b(fi|hi|k)\w*(eld|ed)\b.*$ 
    ------------------------ 

Этот шаблон будет выбрать строки, содержащие эти слова

ПРИМЕЧАНИЕ: Вы должны использовать модификатор многострочный m & глобальный модификатор g

Попробуйте here

Смежные вопросы