2015-03-20 1 views
0

Я ищу в параграфах текста.Регулярное выражение, чтобы ограничить строку до кратчайшего по сравнению с самым длинным совпадением (не-жадная группа)?

Я хотел бы найти строки в этих параграфах, которые начинаются с определенного слова, а затем захватывать текст, который сразу следует за этим совпадающим словом. Я хотел бы остановиться, когда столкнулся с первым периодом, восклицательным знаком, вопросительным знаком или новой строкой ... Если ни один из них не найден в пределах 100 символов поискового слова, я хотел бы отрезать строку от слова граница, ближайшая к пределу 100 символов.

Как я могу это сделать?

Пример

string: "A test sentence containing an ngram and ending with a period. Another sentence that does not have the word we're searching for and runs on until we're past 100 characters." 

regex: /\bngram(.{0,100})(\.|\b)/i 

desired output: ' and ending with a period' 

В этом случае, мои регулярные выражения возвращают «и заканчивающийся период. Другое предложение, которое не имеет слова мы ищем и работает.» Это продолжается дольше, чем я хотел, потому что группа захвата периода/слова является жадной (может быть?). Я не знаю, как ограничить более короткий матч, чем самый длинный матч.

ответ

1

использовать отрицательный класс персонажа, который исключает точку!

/\bngram([^.]{0,100})(\b|\.)/i