|
|
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Вот регулярка: Код: sql 1. = 1 Код: sql 1. = 1 Если что-нибудь добавить после класса символов [:alnum:]+, строка проверку не проходит: Код: sql 1. = 0 Код: sql 1. = 0 Код: sql 1. = 0 Что за артефакт ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 18:28:40 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Если класс символов заменить, например, на точку (любой символ), проблема уходит: Код: sql 1. = 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 18:30:12 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Классы POSIX предназначены для использования в классах символов, так что заключайте их в квадратные скобкиавтор Хорошо, делаем так: Код: sql 1. = 0 И всё равно не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 18:36:48 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Cyrax_02Классы POSIXВ MySQL регэкспы не посиксовые, а перловые, насколько я в курсе. Тут, имхо, дело в жадности. [:alnum:]+ забирает себе все символы, включая единицу. И единице из регекспа уже соответствия не находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 22:01:48 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
авторВ MySQL регэкспы не посиксовые, а перловые, насколько я в курсе.Эта цитата, которую я привёл, - из справки по MySQL: Классы POSIX предназначены для использования в классах символов, так что заключайте их в квадратные скобки авторТут, имхо, дело в жадности. [:alnum:]+ забирает себе все символы, включая единицу. И единице из регекспа уже соответствия не находится. Вы чего-то не то говорите. Если при захвате конструкцией [:alnum:]+ всех символов строка регулярке не соответствует, то объём захвата уменьшается на 1 символ и снова проверяется соответствие (возможность обеспечения соответствия) регулярке. Так работают жадные квантификаторы. Как на Луне - не знаю. ------------------------------------------------------------------------------------------- К примеру, в php строка "test1" регулярке "/\w+1/" соответствует (кстати, тот же самый жадный квантификатор + ). А в MySQL что-то никак... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 00:44:12 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Еще гипотеза: http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp A character class may not be used as an endpoint of a range. Код: sql 1. 2. Выдает 0 1 Похоже, в случае с символьными классами + работает как сверхжадный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 01:12:28 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, [[:alnum:]]+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 09:26:14 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Cyrax_02Вот регулярка: Код: sql 1. = 1 А как вы здесь получили в результате 1? У меня 0 выдает. А вот этот вариант выдает корректно единицу Код: sql 1. Cyrax_02Хорошо, делаем так: SELECT "test1" REGEXP "[[:alnum:]]+1" = 0 И всё равно не работает. У меня этот пример выдает результат 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 10:33:06 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
В общем, итог такой. Символьные классы [: ... :] в MySQL (также, как и в php) работают только внутри группирующих скобок : ... [ [:alnum:] ] ... ... [ [:alnum:][:blank:]() ] ... При использовании символьных классов НЕ внутри группирующих скобок операция RLIKE/REGEXP всегда будет возвращать 0 (регулярное выражение будет синтаксически некорректными): Код: sql 1. 2. ==================================== Как я вчера получил единицу на этом примере: Код: sql 1. и 0 - на этом: Код: sql 1. - мне самому непонятно. P.S. В php (реализован pcre ) символьными классами никогда не пользовался - обходился спец.классами \s, \S, \w, \W, \d, \D и группирующими скобками. А в php, как оказалось, символьные классы тоже допустимо использовать только внутри группирующих скобок . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 21:33:06 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
В любом случае, я уже перешёл с регулярных выражений MySQL на регулярные выражения php: 1) извлекаю все нужные данные из БД 2) на php выполняю preg_match для отобранных строк данных Поскольку MySQL на операции REGEXP/RLIKE и так у себя обрабатывает все строки перебором, то время выполнения будет приблизительно то же. А плюсы получаем следующие: 1) Поддержка спец.классов \s, \S, \w, \W, \d, \D 2) Поддержка именованных групп 3) Поддержка модификаторов Ничего этого в MySQL нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 21:40:46 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Cyrax_02А плюсы получаем следующие:Добавьте поддержку юникода. В MySQL-ных регулярках ее тоже нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 21:49:08 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
авторДобавьте поддержку юникода. В MySQL-ных регулярках ее тоже нет. Даже если все кодировки установлены в utf ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 21:59:35 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
Cyrax_02авторДобавьте поддержку юникода. В MySQL-ных регулярках ее тоже нет. Даже если все кодировки установлены в utf ? http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 22:13:53 |
|
||
|
REGEXP: после класса символов ничего не понимает
|
|||
|---|---|---|---|
|
#18+
miksoftCyrax_02пропущено... Даже если все кодировки установлены в utf ? http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets.Полный список: 1) Поддержка спец.классов \s, \S, \w, \W, \d, \D 2) Поддержка именованных групп 3) Поддержка модификаторов 4) Поддержка юникода (частный случай п.3) Я всем регуляркам, полученным из БД, добавляю 2 модификатора: Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 22:40:35 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38844604&tid=1833752]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
450ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 718ms |

| 0 / 0 |
