Регулярное выражение - глобальный поиск между 2 целыми словами

Я пытаюсь найти содержимое между двумя целыми словами, используя регулярное выражение. Например:

все девушки пошли в торговый центр в городе.

В приведенной выше строке я хочу найти содержимое между словом all и to:

(?<=all).*?(?=to)/g

Однако он находит два совпадения, поскольку выражение не требует поиска только между целыми словами:

" the girls went " //between all and to
" in " //between m(all) and (to)wn

Я подумал добавить в выражение пробелы, например:

(?<= all ).*?(?= to )/g

но это не сработает в приведенной выше строке, поскольку all - первое слово предложения.

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


person Chunky Chunk    schedule 21.05.2011    source источник


Ответы (1)


Добавить границы слов

(?<=\ball\b).*?(?=\bto\b)

\ b - это граница слова без ширины. Он соответствует началу или концу слова (конечно, как определено регулярным выражением)

person Sylverdrag    schedule 21.05.2011
comment
\b совпадает между символом слова (0-9, A-Z, a-z и символ подчеркивания) и любым символом, не являющимся словом - person Ben Blank; 21.05.2011
comment
еще один вопрос: предположим, я хочу, чтобы возвращаемый контент включал все, кроме пробелов, поэтому вместо того, чтобы девушки ушли, я бы получил thegirlswent. как сопоставить все (. *?), кроме пробелов? - person Chunky Chunk; 21.05.2011
comment
@TheDarkIn: Просто удалите пробелы после этого. Очень просто: preg_replace (\ s *,, $ result); Вы можете делать все в одном регулярном выражении, но его будет труднее читать и понимать. Не пытайтесь использовать умные вещи, стремитесь к удобочитаемости. - person Sylverdrag; 21.05.2011
comment
хорошо, я буду проще. но, чтобы углубить мои знания, предположим, что моя граница слова включает один пробел: (? ‹= \ ball \ b). следующий контент не будет найден, если перед ним стоит дополнительный пробел: все девушки ... (все [ПРОБЕЛ] [ПРОБЕЛ] девушки ...). - person Chunky Chunk; 22.05.2011
comment
ты прав. Граница слова не будет совпадать между двумя пробелами. - person Sylverdrag; 22.05.2011