Пользовательская функция REGEXP для использования в операторе SQLITE SELECT - PullRequest
3 голосов
/ 12 января 2011

У меня есть файл базы данных SQLITE, в котором в одном из столбцов таблицы есть несколько простых регулярных выражений.

Эти выражения похожи на / foo (. ?) или / foo / bar /(.?) и так далее ...

Что ж, когда мы пытаемся сопоставить некоторый текст с регулярным шаблоном, в PHP мы делаем:

preg_match ($ pattern, $ target, $ match)

Замена переменных содержимым, очевидно.

То, что я хотел бы сделать, это отправить ЛЮБУЮ СТРОКУ в качестве значения предложения WHERE и при поиске в файле базы данных SQLITE использовать каждое из сохраненных регулярных выражений для сопоставления с шаблоном в данной строке.

Я думаю, что с помощью PHP sqlite_create_function () я могу создать какую-то подпрограмму, чтобы сделать это, но я не знаю точно, как, так как я впервые разрабатываю с использованием SQLITE.

Если интересно, это часть MVC Routing of Framework, которую я разрабатываю.

Большое спасибо, заранее.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Вы можете использовать SQLiteDatabase::createFunction документацию здесь или PDO::sqliteCreateFunction документацию здесь

Я сделал что-то вроде этого:

<?php
function _sqliteRegexp($string, $pattern) {
    if(preg_match('/^'.$pattern.'$/i', $string)) {
        return true;
    }
    return false;
}
$PDO->sqliteCreateFunction('regexp', '_sqliteRegexp', 2);
?>

Использование:

SELECT route FROM routes WHERE pattern REGEXP 'your/url/string' LIMIT 1
1 голос
/ 12 января 2011

Это то, что вы ищете?

e.g. SELECT * FROM `my_table` WHERE `my_column` REGEXP "\/foo(.?)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...