Попробуйте вместо этого использовать этот измененный шаблон:
string pattern = @"\s*ORDER\s*BY.+?LIMIT";
Использование .*
является вероятным виновником, так как это жадное совпадение.Чтобы сделать его нежадным, добавьте к нему ?
, сделав его .*?
.Лично я предпочитаю использовать .+?
, если я ожидаю, что хотя бы один символ будет сопоставлен впоследствии.Для \s*
вы не захотите делать его нежадным, но, возможно, ожидаете использовать \s+
, чтобы гарантировать наличие хотя бы одного символа пробела.На самом деле, вы бы хотели использовать \b
для сопоставления границы слова, а не думать в терминах пробела, что изменило бы шаблон на такой:
string pattern = @"\bORDER\s+BY\b.+?\bLIMIT\b";
Другими словами, сопоставьте началослова «ORDER», за которым следует хотя бы один пробельный символ, совпадение «BY» и граница слова (конец слова), а затем сопоставление с любым символом хотя бы один раз, не жадный, пока полное слово «LIMIT» не станетнайденный.Знание ваших данных важно, и вы, вероятно, можете избежать неприятностей с первым шаблоном.Границы слов полезны, чтобы избежать частичных совпадений и обеспечить полное совпадение слов.Например, см. этот связанный вопрос .