#php #string #match #preg-match #matching
Вопрос:
У меня есть массив с названиями фильмов. Я хочу сопоставить названия этих фильмов с фильмами, которые у меня есть в базе данных. Кроме того, я провожу сравнение с функцией PHP similar_text (). Пока это работает нормально, но иногда для одного названия фильма существует более 100% совпадений. В этом случае я хочу исключить это сравнение, потому что позже я выполню сопоставление вручную. Я хочу работать только со спичками, я могу быть уверен, что это правильный выбор.
Чтобы показать совпадения со 100%, а также более чем на 80%, я использую переключатель / чехол. Поэтому, чтобы игнорировать те, у которых несколько совпадений, я попытался найти их с помощью регулярного выражения, а затем выполнить оператор if. Но мой подход не работает. Он по-прежнему показывает несколько 100% совпадений.
Вот мой подход до сих пор:
$movies = array( // full of movie titles );
foreach ( $movies as $movie ) {
$sim = similar_text($movie->title, $db_title, $perc);
switch($perc) {
case $perc == '100 %':
$preg = preg_match('|^(?=[^%s].*?[%s][^%s]*$)[0-9a-zA-Z_-s:;,.?!()p{L}(%s){1}]*$|u', $perc);
if ( $preg === 0) {
echo "$movie->title: $perc %n";
break;
} else {
echo "no usable match!n";
break;
}
case $perc >= '80 %':
echo "$movie->title: $perc %n";
break;
case $perc <= '80 %':
break;
}
}
Гугл мне на самом деле не помог. Вы найдете множество вопросов о самом similar_text, но не о том, как справиться со случаем, когда несколько строк совпадают на 100%.
У кого-нибудь есть идея?
Большое вам спасибо!
Правка (уточнение кода использования): У меня есть большой массив со многими названиями фильмов (и некоторыми другими материалами, связанными с фильмами) в нем. У меня также есть база данных со многими фильмами в ней. Поскольку у меня нет уникального идентификатора для сопоставления фильмов из массива с фильмами в БД, я хочу сопоставить заголовки с аналогичным текстом. Но иногда название фильма существует 3 раза с точным 100% совпадением. Я хочу найти эти случаи, чтобы я мог справиться с ними позже и просто работать с уникальными 100% совпадениями.
Комментарии:
1. Не уверен, что вы пытаетесь сделать, но если эта часть верна
if ( $preg === 0) {
, то совпадения нет. Это намеренно?2. Хорошо, позвольте мне объяснить: у меня есть большой массив со многими названиями фильмов (и некоторыми другими вещами, связанными с фильмами) в нем. У меня также есть база данных со многими фильмами в ней. Поскольку у меня нет уникального идентификатора для сопоставления фильмов из массива с фильмами в БД, я хочу сопоставить заголовки с аналогичным текстом. Но иногда название фильма существует 3 раза с точным 100% совпадением. Я хочу найти эти случаи, чтобы я мог справиться с ними позже и просто работать с уникальными 100% совпадениями.
3. Таким образом, вы не знаете заранее, какие из них являются точными дубликатами, и вы узнаете это только после обработки всех данных, верно? Затем вы должны отслеживать совпадения и дубликаты. Регулярное выражение соответствует шаблону, который допускает более чем уникальную строку.
4. Хорошо, я понял, значит, мне нужно поработать над регулярным выражением? Я не очень хорошо знаком с регулярными выражениями. У вас есть пример или хороший ресурс, который мне помогает?
5. Например rexegg.com и regular-expressions.info и на этом есть много примеров. Но в вашем коде вы получаете значение, для
$sim
которого не используется. Затем вы включаете$perc
то, что кажется переменной, отсутствующей в примере кода. Зачем вам регулярное выражение?