Как найти иглу множественного числа в стоге сена с помощью preg_match_all? - PullRequest
2 голосов
/ 23 марта 2012

Вот моя потрясающая функция суммирования строк:

function summarize($haystack, $needle, $wordLimit=1) {
    $preg_safe = str_replace(" ", "\s", preg_quote($needle));
    $pattern = "/(\w*\S\s+){0,$wordLimit}\S*\b($preg_safe)\b\S*(\s\S+){0,$wordLimit}/ix";
    if (preg_match_all($pattern, $haystack, $matches)) {
        return $matches[0][0];
    }
    return false;
}

Эта функция ищет стрелку в большой строке и возвращает ее вместе с n словами контекставокруг иглыВроде как в результатах поиска Google отображается строка поиска в контексте результата под заголовком.

Вот как я ее использую:

$haystack = 'Lorem ipsums dolor sit amet.'; // note the plural "ipsum"

echo summarize($haystack,'ipsums');

Возвращает: Lorem ipsums dolor (по умолчанию 1 слово вокруг иглы)

echo summarize($haystack,'ipsum'); // i.e. not exact word match of "ipsums"

Возвращает: false

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

1 Ответ

0 голосов
/ 24 марта 2012

Хорошо, чтобы передать ваш пример, вы можете просто указать необязательный s в конце слова.Например:

"/(\w*\S\s+){0,$wordLimit}\S*\b(${preg_safe}s?)\b\S*(\s\S+){0,$wordLimit}/ix"

Но этого, вероятно, недостаточно.

...