Я даже не знаю, как правильно установить заголовок для этого вопроса. Так что я пытался что-то сделать, но мне не удалось. Я предполагаю, что было бы лучше показать несколько примеров ниже того, чего я хочу достичь.
// Let's say I have a list of some tags/slugs.
$subjects = [
'this-is-one',
'might-be-two',
'yessir',
'indeednodash',
'but-it-might'
];
$patterns = [
'this-is-one', // should match $subjects[0]
'mightbetwoorthree', // should match $subject[1]
'yes-sir', // should match $subject[2]
'indeednodash', // should match $subject[3]
'but-it-might-be-long-as-well' // should match $subject[4]
];
Итак, как можно видеть … Некоторые шаблоны не полностью / точно не соответствуют заданному предмету … Так что это моя проблема. Я хочу сделать регулярное выражение, которое бы соответствовало всем возможным вариантам.
Я попробовал что-то простое, в цикле foreach, но, конечно, это не сработает, так как не полностью соответствует …
if (preg_match("/\b$pattern\b/", $subject)) { // ... }
Любые предложения, объяснения и примеры кода, пожалуйста … Я пытаюсь сосредоточиться на регулярных выражениях, но не получается.
Я тоже буду помечать JS, потому что не обязательно иметь дело с php
или же preg_match
,
function getMatchesOf(pattern, subjects) {
var result = [];
pattern = pattern.replace(/[^a-z]/g, '');
subjects.forEach(function(subject) {
var _subject = subject.replace(/[^a-z]/g, '');
if(pattern.includes(_subject))
result.push(subject);
});
return result;
}var subjects = [
'this-is-one',
'might-be-two',
'yessir',
'indeednodash',
'but-it-might'
];
var patterns = [
'this-is-one',
'mightbe',
'yes-sir',
'indeednodash',
'but-it-might-be-long-as-well'
];
console.log(patterns[0] + " matches: ", getMatchesOf(patterns[0], subjects));
console.log(patterns[4] + " matches: ", getMatchesOf(patterns[4], subjects));
Других решений пока нет …