Подтвердить что ты не робот

Ack regex: Соответствие двух слов по порядку в одной строке

Я хотел бы найти строки в файлах, которые содержат два слова word_1 и word_2 по порядку, например, в Line A ниже, но не как в Line B или Line C:

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 ....
Line C: ... word_2 ....

Я пробовал

$ack '*word_1*word_2'
$ack '(word_1)+*(word_2)+'

и те же команды с ^, добавленными в начале регулярного выражения (в попытке следовать синтаксису regex Perl).

Ни одна из этих команд не возвращает файлы или строки, которые меня интересуют.

Что я делаю неправильно?

Спасибо!

4b9b3361

Ответ 1

Вы хотите найти word_1, за которым следует любое, любое количество раз, за ​​которым следует word_2. Это должно быть

word_1.*word_2

Кажется, вы используете *, поскольку он часто используется в поиске в командной строке, но в регулярных выражениях это квантификатор для предыдущего символа, что означает его совпадение не менее 0 раз. Например, регулярное выражение a* будет соответствовать 0 или более a s, тогда как регулярное выражение a+ будет соответствовать хотя бы одному a.

Метахарактер регулярного выражения, означающий "соответствовать чему-либо", равен ., поэтому .* означает "что-либо совпадение", любое количество раз. См. perlrequick для краткое введение в эту тему.