RegEx и соответствие суффиксу

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

Например, поисковым словом является «контракт», а искомый текст может содержать «контракты, контракты, контракты», которые должны совпадать и выделяться. Однако мне также нужна обратная сторона, поисковое слово может быть «свернуто», а искомый текст — «контракт».

Текст для поиска поступает из БД, и мой SQL вводит правильные записи, я также сократил его до пары предложений для предварительного просмотра. Я попытался возиться с некоторыми идеями, такими как сопоставление по длине слова, например «/ [контракт] {8,} /», «контракты», что работает в первой части примера.

Вот пример кода:

    //Get Preview Of Found Records
$RecordFound = $Title;
$SearchInput = $TestText;
$RegExPattern = preg_quote($SearchInput, '/');
$RegExPattern = "/^.*$RegExPattern.*\n.*\n.*\$/m";

if(preg_match_all($RegExPattern, $RecordFound, $matches)){
echo $PostID." - Area = ".$AreaPK." Type = ".$TypePK;
echo "<br/>";
//Send Preview For Highlighting
echo highlight(implode("\n", $matches[0]), $SearchInput);
echo "<br/>";
}
function highlight($text, $words) {
preg_match_all('~\w+~', $words, $m);
if(!$m)
return $text;
$re = '~\\b(' . implode('|', $m[0]) . ')\\b~i';

return preg_replace($re, '<SPAN style="BACKGROUND-COLOR: #ffff00"><b>$0</b></SPAN>', $text);
}

Спасибо,
Дейв

0

Решение

Вы можете использовать следующее, чтобы найти полное слово (все до пробела \ новой строки)

(contract[^\s,.]*)

Посмотреть https://regex101.com/r/SbhZGo/2 Например

В вашем случае вы можете просто заменить контракт на любые слова, например:

(ball[^\s,.]*)

найдете мяч, шары, воздушный шар и т. д.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector