You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

913 lines
24 KiB

  1. SET NAMES utf8;
  2. #
  3. # MDEV-4425 REGEXP enhancements
  4. #
  5. #
  6. # Checking RLIKE
  7. #
  8. SELECT 'à' RLIKE '^.$';
  9. 'à' RLIKE '^.$'
  10. 1
  11. SELECT 'à' RLIKE '\\x{00E0}';
  12. 'à' RLIKE '\\x{00E0}'
  13. 1
  14. SELECT 'À' RLIKE '\\x{00E0}';
  15. 'À' RLIKE '\\x{00E0}'
  16. 1
  17. SELECT 'à' RLIKE '\\x{00C0}';
  18. 'à' RLIKE '\\x{00C0}'
  19. 1
  20. SELECT 'À' RLIKE '\\x{00C0}';
  21. 'À' RLIKE '\\x{00C0}'
  22. 1
  23. SELECT 'à' RLIKE '\\x{00E0}' COLLATE utf8_bin;
  24. 'à' RLIKE '\\x{00E0}' COLLATE utf8_bin
  25. 1
  26. SELECT 'À' RLIKE '\\x{00E0}' COLLATE utf8_bin;
  27. 'À' RLIKE '\\x{00E0}' COLLATE utf8_bin
  28. 0
  29. SELECT 'à' RLIKE '\\x{00C0}' COLLATE utf8_bin;
  30. 'à' RLIKE '\\x{00C0}' COLLATE utf8_bin
  31. 0
  32. SELECT 'À' RLIKE '\\x{00C0}' COLLATE utf8_bin;
  33. 'À' RLIKE '\\x{00C0}' COLLATE utf8_bin
  34. 1
  35. CREATE TABLE t1 (s VARCHAR(10) CHARACTER SET utf8);
  36. INSERT INTO t1 VALUES ('a'),('A');
  37. CREATE TABLE t2 (p VARCHAR(10) CHARACTER SET utf8);
  38. INSERT INTO t2 VALUES ('a'),('(?i)a'),('(?-i)a'),('A'),('(?i)A'),('(?-i)A');
  39. SELECT s,p,s RLIKE p, s COLLATE utf8_bin RLIKE p FROM t1,t2 ORDER BY BINARY s, BINARY p;
  40. s p s RLIKE p s COLLATE utf8_bin RLIKE p
  41. A (?-i)A 1 1
  42. A (?-i)a 0 0
  43. A (?i)A 1 1
  44. A (?i)a 1 1
  45. A A 1 1
  46. A a 1 0
  47. a (?-i)A 0 0
  48. a (?-i)a 1 1
  49. a (?i)A 1 1
  50. a (?i)a 1 1
  51. a A 1 0
  52. a a 1 1
  53. DROP TABLE t1,t2;
  54. CREATE TABLE t1 (ch VARCHAR(22)) CHARACTER SET utf8;
  55. CREATE TABLE t2 (class VARCHAR(32)) CHARACTER SET utf8;
  56. INSERT INTO t1 VALUES ('Я'),('Σ'),('A'),('À');
  57. INSERT INTO t1 VALUES ('я'),('σ'),('a'),('à');
  58. INSERT INTO t1 VALUES ('㐗'),('갷'),('ප');
  59. INSERT INTO t1 VALUES ('1'),('௨');
  60. INSERT INTO t2 VALUES ('\\p{Cyrillic}'),('\\p{Greek}'),('\\p{Latin}');
  61. INSERT INTO t2 VALUES ('\\p{Han}'),('\\p{Hangul}');
  62. INSERT INTO t2 VALUES ('\\p{Sinhala}'), ('\\p{Tamil}');
  63. INSERT INTO t2 VALUES ('\\p{L}'),('\\p{Ll}'),('\\p{Lu}'),('\\p{L&}');
  64. INSERT INTO t2 VALUES ('[[:alpha:]]'),('[[:digit:]]');
  65. SELECT class, ch, ch RLIKE class FROM t1, t2 ORDER BY class, BINARY ch;
  66. class ch ch RLIKE class
  67. [[:alpha:]] 1 0
  68. [[:alpha:]] A 1
  69. [[:alpha:]] a 1
  70. [[:alpha:]] À 1
  71. [[:alpha:]] à 1
  72. [[:alpha:]] Σ 1
  73. [[:alpha:]] σ 1
  74. [[:alpha:]] Я 1
  75. [[:alpha:]] я 1
  76. [[:alpha:]] ௨ 0
  77. [[:alpha:]] ප 1
  78. [[:alpha:]] 㐗 1
  79. [[:alpha:]] 갷 1
  80. [[:digit:]] 1 1
  81. [[:digit:]] A 0
  82. [[:digit:]] a 0
  83. [[:digit:]] À 0
  84. [[:digit:]] à 0
  85. [[:digit:]] Σ 0
  86. [[:digit:]] σ 0
  87. [[:digit:]] Я 0
  88. [[:digit:]] я 0
  89. [[:digit:]] ௨ 1
  90. [[:digit:]] ප 0
  91. [[:digit:]] 㐗 0
  92. [[:digit:]] 갷 0
  93. \p{Cyrillic} 1 0
  94. \p{Cyrillic} A 0
  95. \p{Cyrillic} a 0
  96. \p{Cyrillic} À 0
  97. \p{Cyrillic} à 0
  98. \p{Cyrillic} Σ 0
  99. \p{Cyrillic} σ 0
  100. \p{Cyrillic} Я 1
  101. \p{Cyrillic} я 1
  102. \p{Cyrillic} ௨ 0
  103. \p{Cyrillic} ප 0
  104. \p{Cyrillic} 㐗 0
  105. \p{Cyrillic} 갷 0
  106. \p{Greek} 1 0
  107. \p{Greek} A 0
  108. \p{Greek} a 0
  109. \p{Greek} À 0
  110. \p{Greek} à 0
  111. \p{Greek} Σ 1
  112. \p{Greek} σ 1
  113. \p{Greek} Я 0
  114. \p{Greek} я 0
  115. \p{Greek} ௨ 0
  116. \p{Greek} ප 0
  117. \p{Greek} 㐗 0
  118. \p{Greek} 갷 0
  119. \p{Hangul} 1 0
  120. \p{Hangul} A 0
  121. \p{Hangul} a 0
  122. \p{Hangul} À 0
  123. \p{Hangul} à 0
  124. \p{Hangul} Σ 0
  125. \p{Hangul} σ 0
  126. \p{Hangul} Я 0
  127. \p{Hangul} я 0
  128. \p{Hangul} ௨ 0
  129. \p{Hangul} ප 0
  130. \p{Hangul} 㐗 0
  131. \p{Hangul} 갷 1
  132. \p{Han} 1 0
  133. \p{Han} A 0
  134. \p{Han} a 0
  135. \p{Han} À 0
  136. \p{Han} à 0
  137. \p{Han} Σ 0
  138. \p{Han} σ 0
  139. \p{Han} Я 0
  140. \p{Han} я 0
  141. \p{Han} ௨ 0
  142. \p{Han} ප 0
  143. \p{Han} 㐗 1
  144. \p{Han} 갷 0
  145. \p{L&} 1 0
  146. \p{L&} A 1
  147. \p{L&} a 1
  148. \p{L&} À 1
  149. \p{L&} à 1
  150. \p{L&} Σ 1
  151. \p{L&} σ 1
  152. \p{L&} Я 1
  153. \p{L&} я 1
  154. \p{L&} ௨ 0
  155. \p{L&} ප 0
  156. \p{L&} 㐗 0
  157. \p{L&} 갷 0
  158. \p{Latin} 1 0
  159. \p{Latin} A 1
  160. \p{Latin} a 1
  161. \p{Latin} À 1
  162. \p{Latin} à 1
  163. \p{Latin} Σ 0
  164. \p{Latin} σ 0
  165. \p{Latin} Я 0
  166. \p{Latin} я 0
  167. \p{Latin} ௨ 0
  168. \p{Latin} ප 0
  169. \p{Latin} 㐗 0
  170. \p{Latin} 갷 0
  171. \p{Ll} 1 0
  172. \p{Ll} A 0
  173. \p{Ll} a 1
  174. \p{Ll} À 0
  175. \p{Ll} à 1
  176. \p{Ll} Σ 0
  177. \p{Ll} σ 1
  178. \p{Ll} Я 0
  179. \p{Ll} я 1
  180. \p{Ll} ௨ 0
  181. \p{Ll} ප 0
  182. \p{Ll} 㐗 0
  183. \p{Ll} 갷 0
  184. \p{Lu} 1 0
  185. \p{Lu} A 1
  186. \p{Lu} a 0
  187. \p{Lu} À 1
  188. \p{Lu} à 0
  189. \p{Lu} Σ 1
  190. \p{Lu} σ 0
  191. \p{Lu} Я 1
  192. \p{Lu} я 0
  193. \p{Lu} ௨ 0
  194. \p{Lu} ප 0
  195. \p{Lu} 㐗 0
  196. \p{Lu} 갷 0
  197. \p{L} 1 0
  198. \p{L} A 1
  199. \p{L} a 1
  200. \p{L} À 1
  201. \p{L} à 1
  202. \p{L} Σ 1
  203. \p{L} σ 1
  204. \p{L} Я 1
  205. \p{L} я 1
  206. \p{L} ௨ 0
  207. \p{L} ප 1
  208. \p{L} 㐗 1
  209. \p{L} 갷 1
  210. \p{Sinhala} 1 0
  211. \p{Sinhala} A 0
  212. \p{Sinhala} a 0
  213. \p{Sinhala} À 0
  214. \p{Sinhala} à 0
  215. \p{Sinhala} Σ 0
  216. \p{Sinhala} σ 0
  217. \p{Sinhala} Я 0
  218. \p{Sinhala} я 0
  219. \p{Sinhala} ௨ 0
  220. \p{Sinhala} ප 1
  221. \p{Sinhala} 㐗 0
  222. \p{Sinhala} 갷 0
  223. \p{Tamil} 1 0
  224. \p{Tamil} A 0
  225. \p{Tamil} a 0
  226. \p{Tamil} À 0
  227. \p{Tamil} à 0
  228. \p{Tamil} Σ 0
  229. \p{Tamil} σ 0
  230. \p{Tamil} Я 0
  231. \p{Tamil} я 0
  232. \p{Tamil} ௨ 1
  233. \p{Tamil} ප 0
  234. \p{Tamil} 㐗 0
  235. \p{Tamil} 갷 0
  236. DROP TABLE t1, t2;
  237. SELECT 0xFF RLIKE '\\w';
  238. 0xFF RLIKE '\\w'
  239. 0
  240. SELECT 0xFF RLIKE '(*UCP)\\w';
  241. 0xFF RLIKE '(*UCP)\\w'
  242. 1
  243. SELECT '\n' RLIKE '(*CR)';
  244. '\n' RLIKE '(*CR)'
  245. 1
  246. SELECT '\n' RLIKE '(*LF)';
  247. '\n' RLIKE '(*LF)'
  248. 1
  249. SELECT '\n' RLIKE '(*CRLF)';
  250. '\n' RLIKE '(*CRLF)'
  251. 1
  252. SELECT '\n' RLIKE '(*ANYCRLF)';
  253. '\n' RLIKE '(*ANYCRLF)'
  254. 1
  255. SELECT '\n' RLIKE '(*ANY)';
  256. '\n' RLIKE '(*ANY)'
  257. 1
  258. SELECT 'a\nb' RLIKE '(*LF)(?m)^a$';
  259. 'a\nb' RLIKE '(*LF)(?m)^a$'
  260. 1
  261. SELECT 'a\nb' RLIKE '(*CR)(?m)^a$';
  262. 'a\nb' RLIKE '(*CR)(?m)^a$'
  263. 0
  264. SELECT 'a\nb' RLIKE '(*CRLF)(?m)^a$';
  265. 'a\nb' RLIKE '(*CRLF)(?m)^a$'
  266. 0
  267. SELECT 'a\nb' RLIKE '(*ANYCRLF)(?m)^a$';
  268. 'a\nb' RLIKE '(*ANYCRLF)(?m)^a$'
  269. 1
  270. SELECT 'a\rb' RLIKE '(*LF)(?m)^a$';
  271. 'a\rb' RLIKE '(*LF)(?m)^a$'
  272. 0
  273. SELECT 'a\rb' RLIKE '(*CR)(?m)^a$';
  274. 'a\rb' RLIKE '(*CR)(?m)^a$'
  275. 1
  276. SELECT 'a\rb' RLIKE '(*CRLF)(?m)^a$';
  277. 'a\rb' RLIKE '(*CRLF)(?m)^a$'
  278. 0
  279. SELECT 'a\rb' RLIKE '(*ANYCRLF)(?m)^a$';
  280. 'a\rb' RLIKE '(*ANYCRLF)(?m)^a$'
  281. 1
  282. SELECT 'a\r\nb' RLIKE '(*LF)(?m)^a$';
  283. 'a\r\nb' RLIKE '(*LF)(?m)^a$'
  284. 0
  285. SELECT 'a\r\nb' RLIKE '(*CR)(?m)^a$';
  286. 'a\r\nb' RLIKE '(*CR)(?m)^a$'
  287. 1
  288. SELECT 'a\r\nb' RLIKE '(*CRLF)(?m)^a$';
  289. 'a\r\nb' RLIKE '(*CRLF)(?m)^a$'
  290. 1
  291. SELECT 'a\r\nb' RLIKE '(*ANYCRLF)(?m)^a$';
  292. 'a\r\nb' RLIKE '(*ANYCRLF)(?m)^a$'
  293. 1
  294. SELECT 'aa' RLIKE '(a)\\g1';
  295. 'aa' RLIKE '(a)\\g1'
  296. 1
  297. SELECT 'aa bb' RLIKE '(a)\\g1 (b)\\g2';
  298. 'aa bb' RLIKE '(a)\\g1 (b)\\g2'
  299. 1
  300. SELECT 'aaaaa' RLIKE 'a{0,5}';
  301. 'aaaaa' RLIKE 'a{0,5}'
  302. 1
  303. SELECT 'aaaaa' RLIKE 'a{1,3}';
  304. 'aaaaa' RLIKE 'a{1,3}'
  305. 1
  306. SELECT 'aaaaa' RLIKE 'a{0,}';
  307. 'aaaaa' RLIKE 'a{0,}'
  308. 1
  309. SELECT 'aaaaa' RLIKE 'a{10,20}';
  310. 'aaaaa' RLIKE 'a{10,20}'
  311. 0
  312. SELECT 'aabb' RLIKE 'a(?R)?b';
  313. 'aabb' RLIKE 'a(?R)?b'
  314. 1
  315. SELECT 'aabb' RLIKE 'aa(?R)?bb';
  316. 'aabb' RLIKE 'aa(?R)?bb'
  317. 1
  318. SELECT 'abcc' RLIKE 'a(?>bc|b)c';
  319. 'abcc' RLIKE 'a(?>bc|b)c'
  320. 1
  321. SELECT 'abc' RLIKE 'a(?>bc|b)c';
  322. 'abc' RLIKE 'a(?>bc|b)c'
  323. 0
  324. SELECT 'ab' RLIKE 'a(?!b)';
  325. 'ab' RLIKE 'a(?!b)'
  326. 0
  327. SELECT 'ac' RLIKE 'a(?!b)';
  328. 'ac' RLIKE 'a(?!b)'
  329. 1
  330. SELECT 'ab' RLIKE 'a(?=b)';
  331. 'ab' RLIKE 'a(?=b)'
  332. 1
  333. SELECT 'ac' RLIKE 'a(?=b)';
  334. 'ac' RLIKE 'a(?=b)'
  335. 0
  336. SELECT 'ab' RLIKE '(?<!a)b';
  337. 'ab' RLIKE '(?<!a)b'
  338. 0
  339. SELECT 'cb' RLIKE '(?<!a)b';
  340. 'cb' RLIKE '(?<!a)b'
  341. 1
  342. SELECT 'ab' RLIKE '(?<=a)b';
  343. 'ab' RLIKE '(?<=a)b'
  344. 1
  345. SELECT 'cb' RLIKE '(?<=a)b';
  346. 'cb' RLIKE '(?<=a)b'
  347. 0
  348. SELECT 'aa' RLIKE '(?P<pattern>a)(?P=pattern)';
  349. 'aa' RLIKE '(?P<pattern>a)(?P=pattern)'
  350. 1
  351. SELECT 'aba' RLIKE '(?P<pattern>a)b(?P=pattern)';
  352. 'aba' RLIKE '(?P<pattern>a)b(?P=pattern)'
  353. 1
  354. SELECT 'a' RLIKE 'a(?#comment)';
  355. 'a' RLIKE 'a(?#comment)'
  356. 1
  357. SELECT 'aa' RLIKE 'a(?#comment)a';
  358. 'aa' RLIKE 'a(?#comment)a'
  359. 1
  360. SELECT 'aba' RLIKE 'a(?#b)a';
  361. 'aba' RLIKE 'a(?#b)a'
  362. 0
  363. SELECT 'aaa' RLIKE '\\W\\W\\W';
  364. 'aaa' RLIKE '\\W\\W\\W'
  365. 0
  366. SELECT '%' RLIKE '\\W';
  367. '%' RLIKE '\\W'
  368. 1
  369. SELECT '%a$' RLIKE '\\W.\\W';
  370. '%a$' RLIKE '\\W.\\W'
  371. 1
  372. SELECT '123' RLIKE '\\d\\d\\d';
  373. '123' RLIKE '\\d\\d\\d'
  374. 1
  375. SELECT 'aaa' RLIKE '\\d\\d\\d';
  376. 'aaa' RLIKE '\\d\\d\\d'
  377. 0
  378. SELECT '1a3' RLIKE '\\d.\\d';
  379. '1a3' RLIKE '\\d.\\d'
  380. 1
  381. SELECT 'a1b' RLIKE '\\d.\\d';
  382. 'a1b' RLIKE '\\d.\\d'
  383. 0
  384. SELECT '8' RLIKE '\\D';
  385. '8' RLIKE '\\D'
  386. 0
  387. SELECT 'a' RLIKE '\\D';
  388. 'a' RLIKE '\\D'
  389. 1
  390. SELECT '%' RLIKE '\\D';
  391. '%' RLIKE '\\D'
  392. 1
  393. SELECT 'a1' RLIKE '\\D\\d';
  394. 'a1' RLIKE '\\D\\d'
  395. 1
  396. SELECT 'a1' RLIKE '\\d\\D';
  397. 'a1' RLIKE '\\d\\D'
  398. 0
  399. SELECT '\t' RLIKE '\\s';
  400. '\t' RLIKE '\\s'
  401. 1
  402. SELECT '\r' RLIKE '\\s';
  403. '\r' RLIKE '\\s'
  404. 1
  405. SELECT '\n' RLIKE '\\s';
  406. '\n' RLIKE '\\s'
  407. 1
  408. SELECT '\v' RLIKE '\\s';
  409. '\v' RLIKE '\\s'
  410. 0
  411. SELECT 'a' RLIKE '\\S';
  412. 'a' RLIKE '\\S'
  413. 1
  414. SELECT '1' RLIKE '\\S';
  415. '1' RLIKE '\\S'
  416. 1
  417. SELECT '!' RLIKE '\\S';
  418. '!' RLIKE '\\S'
  419. 1
  420. SELECT '.' RLIKE '\\S';
  421. '.' RLIKE '\\S'
  422. 1
  423. SELECT 'abc\0def' REGEXP 'def';
  424. 'abc\0def' REGEXP 'def'
  425. 1
  426. SELECT 'abc\0def' REGEXP 'abc\\x{00}def';
  427. 'abc\0def' REGEXP 'abc\\x{00}def'
  428. 1
  429. SELECT HEX(REGEXP_SUBSTR('abc\0def','abc\\x{00}def'));
  430. HEX(REGEXP_SUBSTR('abc\0def','abc\\x{00}def'))
  431. 61626300646566
  432. #
  433. # Checking REGEXP_REPLACE
  434. #
  435. CREATE TABLE t1 AS SELECT REGEXP_REPLACE('abc','b','x');
  436. SHOW CREATE TABLE t1;
  437. Table Create Table
  438. t1 CREATE TABLE `t1` (
  439. `REGEXP_REPLACE('abc','b','x')` longtext CHARACTER SET utf8 NOT NULL
  440. ) ENGINE=MyISAM DEFAULT CHARSET=latin1
  441. DROP TABLE t1;
  442. EXPLAIN EXTENDED SELECT REGEXP_REPLACE('abc','b','x');
  443. id select_type table type possible_keys key key_len ref rows filtered Extra
  444. 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
  445. Warnings:
  446. Note 1003 select regexp_replace('abc','b','x') AS `REGEXP_REPLACE('abc','b','x')`
  447. CREATE TABLE t1 AS SELECT REGEXP_REPLACE('abc','b','x')+0;
  448. SHOW CREATE TABLE t1;
  449. Table Create Table
  450. t1 CREATE TABLE `t1` (
  451. `REGEXP_REPLACE('abc','b','x')+0` double NOT NULL DEFAULT '0'
  452. ) ENGINE=MyISAM DEFAULT CHARSET=latin1
  453. DROP TABLE t1;
  454. SELECT REGEXP_REPLACE(NULL,'b','c');
  455. REGEXP_REPLACE(NULL,'b','c')
  456. NULL
  457. SELECT REGEXP_REPLACE('a',NULL,'c');
  458. REGEXP_REPLACE('a',NULL,'c')
  459. NULL
  460. SELECT REGEXP_REPLACE('a','b',NULL);
  461. REGEXP_REPLACE('a','b',NULL)
  462. NULL
  463. SELECT REGEXP_REPLACE('a','x','b');
  464. REGEXP_REPLACE('a','x','b')
  465. a
  466. SELECT REGEXP_REPLACE('a','','b');
  467. REGEXP_REPLACE('a','','b')
  468. a
  469. SELECT REGEXP_REPLACE('a5b ab a5b','(?<=a)5*(?=b)','x');
  470. REGEXP_REPLACE('a5b ab a5b','(?<=a)5*(?=b)','x')
  471. axb ab a5b
  472. SELECT REGEXP_REPLACE('a5b a5b a5b','(?<=a)5*(?=b)','x');
  473. REGEXP_REPLACE('a5b a5b a5b','(?<=a)5*(?=b)','x')
  474. axb axb axb
  475. SELECT REGEXP_REPLACE('A','a','b');
  476. REGEXP_REPLACE('A','a','b')
  477. b
  478. SELECT REGEXP_REPLACE('a','A','b');
  479. REGEXP_REPLACE('a','A','b')
  480. b
  481. SELECT REGEXP_REPLACE('A' COLLATE utf8_bin,'a','b');
  482. REGEXP_REPLACE('A' COLLATE utf8_bin,'a','b')
  483. A
  484. SELECT REGEXP_REPLACE('a' COLLATE utf8_bin,'A','b');
  485. REGEXP_REPLACE('a' COLLATE utf8_bin,'A','b')
  486. a
  487. SELECT REGEXP_REPLACE('James Bond', '(.*) (.*)', '\\2, \\1 \\2');
  488. REGEXP_REPLACE('James Bond', '(.*) (.*)', '\\2, \\1 \\2')
  489. Bond, James Bond
  490. SELECT REGEXP_REPLACE('абвгд','в','ц');
  491. REGEXP_REPLACE('абвгд','в','ц')
  492. абцгд
  493. SELECT REGEXP_REPLACE('г',0xB3,0xB4);
  494. REGEXP_REPLACE('г',0xB3,0xB4)
  495. д
  496. SELECT REGEXP_REPLACE('aaaa','a','b');
  497. REGEXP_REPLACE('aaaa','a','b')
  498. bbbb
  499. SELECT REGEXP_REPLACE('aaaa','(?<=.)a','b');
  500. REGEXP_REPLACE('aaaa','(?<=.)a','b')
  501. abbb
  502. SELECT REGEXP_REPLACE('aaaa','a(?=.)','b');
  503. REGEXP_REPLACE('aaaa','a(?=.)','b')
  504. bbba
  505. SELECT REGEXP_REPLACE('aaaa','(?<=.)a(?=.)','b');
  506. REGEXP_REPLACE('aaaa','(?<=.)a(?=.)','b')
  507. abba
  508. SELECT REGEXP_REPLACE('a\nb','(*LF)(?m)^a$','c');
  509. REGEXP_REPLACE('a\nb','(*LF)(?m)^a$','c')
  510. c
  511. b
  512. SELECT REGEXP_REPLACE('a\nb','(*CR)(?m)^a$','c');
  513. REGEXP_REPLACE('a\nb','(*CR)(?m)^a$','c')
  514. a
  515. b
  516. SELECT REGEXP_REPLACE('a\nb','(*CRLF)(?m)^a$','c');
  517. REGEXP_REPLACE('a\nb','(*CRLF)(?m)^a$','c')
  518. a
  519. b
  520. SELECT REGEXP_REPLACE('a\nb','(*ANYCRLF)(?m)^a$','c');
  521. REGEXP_REPLACE('a\nb','(*ANYCRLF)(?m)^a$','c')
  522. c
  523. b
  524. SELECT REGEXP_REPLACE('a\rb','(*LF)(?m)^a$','c');
  525. REGEXP_REPLACE('a\rb','(*LF)(?m)^a$','c')
  526. a b
  527. SELECT REGEXP_REPLACE('a\rb','(*CR)(?m)^a$','c');
  528. REGEXP_REPLACE('a\rb','(*CR)(?m)^a$','c')
  529. c b
  530. SELECT REGEXP_REPLACE('a\rb','(*CRLF)(?m)^a$','c');
  531. REGEXP_REPLACE('a\rb','(*CRLF)(?m)^a$','c')
  532. a b
  533. SELECT REGEXP_REPLACE('a\rb','(*ANYCRLF)(?m)^a$','c');
  534. REGEXP_REPLACE('a\rb','(*ANYCRLF)(?m)^a$','c')
  535. c b
  536. SELECT REGEXP_REPLACE('a\r\nb','(*LF)(?m)^a$','c');
  537. REGEXP_REPLACE('a\r\nb','(*LF)(?m)^a$','c')
  538. a
  539. b
  540. SELECT REGEXP_REPLACE('a\r\nb','(*CR)(?m)^a$','c');
  541. REGEXP_REPLACE('a\r\nb','(*CR)(?m)^a$','c')
  542. c
  543. b
  544. SELECT REGEXP_REPLACE('a\r\nb','(*CRLF)(?m)^a$','c');
  545. REGEXP_REPLACE('a\r\nb','(*CRLF)(?m)^a$','c')
  546. c
  547. b
  548. SELECT REGEXP_REPLACE('a\r\nb','(*ANYCRLF)(?m)^a$','c');
  549. REGEXP_REPLACE('a\r\nb','(*ANYCRLF)(?m)^a$','c')
  550. c
  551. b
  552. SELECT REGEXP_REPLACE('aa','(a)\\g1','b');
  553. REGEXP_REPLACE('aa','(a)\\g1','b')
  554. b
  555. SELECT REGEXP_REPLACE('aa bb','(a)\\g1 (b)\\g2','c');
  556. REGEXP_REPLACE('aa bb','(a)\\g1 (b)\\g2','c')
  557. c
  558. SELECT REGEXP_REPLACE('aaaaa','a{1,3}','b');
  559. REGEXP_REPLACE('aaaaa','a{1,3}','b')
  560. bb
  561. SELECT REGEXP_REPLACE('aaaaa','a{10,20}','b');
  562. REGEXP_REPLACE('aaaaa','a{10,20}','b')
  563. aaaaa
  564. SELECT REGEXP_REPLACE('daabbd','a(?R)?b','c');
  565. REGEXP_REPLACE('daabbd','a(?R)?b','c')
  566. dcd
  567. SELECT REGEXP_REPLACE('daabbd','aa(?R)?bb','c');
  568. REGEXP_REPLACE('daabbd','aa(?R)?bb','c')
  569. dcd
  570. SELECT REGEXP_REPLACE('dabccd','a(?>bc|b)c','e');
  571. REGEXP_REPLACE('dabccd','a(?>bc|b)c','e')
  572. ded
  573. SELECT REGEXP_REPLACE('dabcd','a(?>bc|b)c','e');
  574. REGEXP_REPLACE('dabcd','a(?>bc|b)c','e')
  575. dabcd
  576. SELECT REGEXP_REPLACE('ab','a(?!b)','e');
  577. REGEXP_REPLACE('ab','a(?!b)','e')
  578. ab
  579. SELECT REGEXP_REPLACE('ac','a(?!b)','e');
  580. REGEXP_REPLACE('ac','a(?!b)','e')
  581. ec
  582. SELECT REGEXP_REPLACE('ab','a(?=b)','e');
  583. REGEXP_REPLACE('ab','a(?=b)','e')
  584. eb
  585. SELECT REGEXP_REPLACE('ac','a(?=b)','e');
  586. REGEXP_REPLACE('ac','a(?=b)','e')
  587. ac
  588. SELECT REGEXP_REPLACE('ab','(?<!a)b','e');
  589. REGEXP_REPLACE('ab','(?<!a)b','e')
  590. ab
  591. SELECT REGEXP_REPLACE('cb','(?<!a)b','e');
  592. REGEXP_REPLACE('cb','(?<!a)b','e')
  593. ce
  594. SELECT REGEXP_REPLACE('ab','(?<=a)b','e');
  595. REGEXP_REPLACE('ab','(?<=a)b','e')
  596. ae
  597. SELECT REGEXP_REPLACE('cb','(?<=a)b','e');
  598. REGEXP_REPLACE('cb','(?<=a)b','e')
  599. cb
  600. SELECT REGEXP_REPLACE('aa','(?P<pattern>a)(?P=pattern)','b');
  601. REGEXP_REPLACE('aa','(?P<pattern>a)(?P=pattern)','b')
  602. b
  603. SELECT REGEXP_REPLACE('aba','(?P<pattern>a)b(?P=pattern)','c');
  604. REGEXP_REPLACE('aba','(?P<pattern>a)b(?P=pattern)','c')
  605. c
  606. SELECT REGEXP_REPLACE('a','a(?#comment)','e');
  607. REGEXP_REPLACE('a','a(?#comment)','e')
  608. e
  609. SELECT REGEXP_REPLACE('aa','a(?#comment)a','e');
  610. REGEXP_REPLACE('aa','a(?#comment)a','e')
  611. e
  612. SELECT REGEXP_REPLACE('aba','a(?#b)a','e');
  613. REGEXP_REPLACE('aba','a(?#b)a','e')
  614. aba
  615. SELECT REGEXP_REPLACE('ddd<ab>cc</ab>eee','<.+?>','*');
  616. REGEXP_REPLACE('ddd<ab>cc</ab>eee','<.+?>','*')
  617. ddd*cc*eee
  618. SELECT REGEXP_REPLACE('aaa','\\W\\W\\W','e');
  619. REGEXP_REPLACE('aaa','\\W\\W\\W','e')
  620. aaa
  621. SELECT REGEXP_REPLACE('aaa','\\w\\w\\w','e');
  622. REGEXP_REPLACE('aaa','\\w\\w\\w','e')
  623. e
  624. SELECT REGEXP_REPLACE('%','\\W','e');
  625. REGEXP_REPLACE('%','\\W','e')
  626. e
  627. SELECT REGEXP_REPLACE('%a$','\\W.\\W','e');
  628. REGEXP_REPLACE('%a$','\\W.\\W','e')
  629. e
  630. SELECT REGEXP_REPLACE('%a$','\\W\\w\\W','e');
  631. REGEXP_REPLACE('%a$','\\W\\w\\W','e')
  632. e
  633. SELECT REGEXP_REPLACE('123','\\d\\d\\d\\d\\d\\d','e');
  634. REGEXP_REPLACE('123','\\d\\d\\d\\d\\d\\d','e')
  635. 123
  636. SELECT REGEXP_REPLACE('123','\\d\\d\\d','e');
  637. REGEXP_REPLACE('123','\\d\\d\\d','e')
  638. e
  639. SELECT REGEXP_REPLACE('aaa','\\d\\d\\d','e');
  640. REGEXP_REPLACE('aaa','\\d\\d\\d','e')
  641. aaa
  642. SELECT REGEXP_REPLACE('1a3','\\d.\\d\\d.\\d','e');
  643. REGEXP_REPLACE('1a3','\\d.\\d\\d.\\d','e')
  644. 1a3
  645. SELECT REGEXP_REPLACE('1a3','\\d.\\d','e');
  646. REGEXP_REPLACE('1a3','\\d.\\d','e')
  647. e
  648. SELECT REGEXP_REPLACE('a1b','\\d.\\d','e');
  649. REGEXP_REPLACE('a1b','\\d.\\d','e')
  650. a1b
  651. SELECT REGEXP_REPLACE('8','\\D','e');
  652. REGEXP_REPLACE('8','\\D','e')
  653. 8
  654. SELECT REGEXP_REPLACE('a','\\D','e');
  655. REGEXP_REPLACE('a','\\D','e')
  656. e
  657. SELECT REGEXP_REPLACE('%','\\D','e');
  658. REGEXP_REPLACE('%','\\D','e')
  659. e
  660. SELECT REGEXP_REPLACE('a1','\\D\\d','e');
  661. REGEXP_REPLACE('a1','\\D\\d','e')
  662. e
  663. SELECT REGEXP_REPLACE('a1','\\d\\D','e');
  664. REGEXP_REPLACE('a1','\\d\\D','e')
  665. a1
  666. SELECT REGEXP_REPLACE('\t','\\s','e');
  667. REGEXP_REPLACE('\t','\\s','e')
  668. e
  669. SELECT REGEXP_REPLACE('\r','\\s','e');
  670. REGEXP_REPLACE('\r','\\s','e')
  671. e
  672. SELECT REGEXP_REPLACE('\n','\\s','e');
  673. REGEXP_REPLACE('\n','\\s','e')
  674. e
  675. SELECT REGEXP_REPLACE('a','\\S','e');
  676. REGEXP_REPLACE('a','\\S','e')
  677. e
  678. SELECT REGEXP_REPLACE('1','\\S','e');
  679. REGEXP_REPLACE('1','\\S','e')
  680. e
  681. SELECT REGEXP_REPLACE('!','\\S','e');
  682. REGEXP_REPLACE('!','\\S','e')
  683. e
  684. SELECT REGEXP_REPLACE('.','\\S','e');
  685. REGEXP_REPLACE('.','\\S','e')
  686. e
  687. #
  688. # Checking REGEXP_INSTR
  689. #
  690. SELECT REGEXP_INSTR('abcd','X');
  691. REGEXP_INSTR('abcd','X')
  692. 0
  693. SELECT REGEXP_INSTR('abcd','a');
  694. REGEXP_INSTR('abcd','a')
  695. 1
  696. SELECT REGEXP_INSTR('abcd','b');
  697. REGEXP_INSTR('abcd','b')
  698. 2
  699. SELECT REGEXP_INSTR('abcd','c');
  700. REGEXP_INSTR('abcd','c')
  701. 3
  702. SELECT REGEXP_INSTR('abcd','d');
  703. REGEXP_INSTR('abcd','d')
  704. 4
  705. SELECT REGEXP_INSTR('aaaa','(?<=a)a');
  706. REGEXP_INSTR('aaaa','(?<=a)a')
  707. 2
  708. SELECT REGEXP_INSTR('вася','в');
  709. REGEXP_INSTR('вася','в')
  710. 1
  711. SELECT REGEXP_INSTR('вася','а');
  712. REGEXP_INSTR('вася','а')
  713. 2
  714. SELECT REGEXP_INSTR('вася','с');
  715. REGEXP_INSTR('вася','с')
  716. 3
  717. SELECT REGEXP_INSTR('вася','я');
  718. REGEXP_INSTR('вася','я')
  719. 4
  720. SELECT REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('в' USING koi8r));
  721. REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('в' USING koi8r))
  722. 1
  723. SELECT REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('а' USING koi8r));
  724. REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('а' USING koi8r))
  725. 2
  726. SELECT REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('с' USING koi8r));
  727. REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('с' USING koi8r))
  728. 3
  729. SELECT REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('я' USING koi8r));
  730. REGEXP_INSTR(CONVERT('вася' USING koi8r), CONVERT('я' USING koi8r))
  731. 4
  732. #
  733. # Checking REGEXP_SUBSTR
  734. #
  735. CREATE TABLE t1 AS SELECT REGEXP_SUBSTR('abc','b');
  736. SHOW CREATE TABLE t1;
  737. Table Create Table
  738. t1 CREATE TABLE `t1` (
  739. `REGEXP_SUBSTR('abc','b')` varchar(3) CHARACTER SET utf8 NOT NULL DEFAULT ''
  740. ) ENGINE=MyISAM DEFAULT CHARSET=latin1
  741. DROP TABLE t1;
  742. EXPLAIN EXTENDED SELECT REGEXP_SUBSTR('abc','b');
  743. id select_type table type possible_keys key key_len ref rows filtered Extra
  744. 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
  745. Warnings:
  746. Note 1003 select regexp_substr('abc','b') AS `REGEXP_SUBSTR('abc','b')`
  747. CREATE TABLE t1 AS SELECT REGEXP_SUBSTR('abc','b')+0;
  748. SHOW CREATE TABLE t1;
  749. Table Create Table
  750. t1 CREATE TABLE `t1` (
  751. `REGEXP_SUBSTR('abc','b')+0` double NOT NULL DEFAULT '0'
  752. ) ENGINE=MyISAM DEFAULT CHARSET=latin1
  753. DROP TABLE t1;
  754. SELECT REGEXP_SUBSTR('See https://mariadb.org/en/foundation/ for details', 'https?://[^/]*');
  755. REGEXP_SUBSTR('See https://mariadb.org/en/foundation/ for details', 'https?://[^/]*')
  756. https://mariadb.org
  757. #
  758. # MDEV-6027 RLIKE: "." no longer matching new line
  759. #
  760. SELECT 'cat and\ndog' RLIKE 'cat.*dog';
  761. 'cat and\ndog' RLIKE 'cat.*dog'
  762. 0
  763. SELECT 'cat and\r\ndog' RLIKE 'cat.*dog';
  764. 'cat and\r\ndog' RLIKE 'cat.*dog'
  765. 0
  766. SELECT 'a\nb' RLIKE 'a.b';
  767. 'a\nb' RLIKE 'a.b'
  768. 0
  769. SELECT 'a\nb' RLIKE '(?-s)a.b';
  770. 'a\nb' RLIKE '(?-s)a.b'
  771. 0
  772. SET default_regex_flags='DOTALL';
  773. SELECT @@default_regex_flags;
  774. @@default_regex_flags
  775. DOTALL
  776. SELECT 'cat and\ndog' RLIKE 'cat.*dog';
  777. 'cat and\ndog' RLIKE 'cat.*dog'
  778. 1
  779. SELECT 'cat and\r\ndog' RLIKE 'cat.*dog';
  780. 'cat and\r\ndog' RLIKE 'cat.*dog'
  781. 1
  782. SELECT 'a\nb' RLIKE 'a.b';
  783. 'a\nb' RLIKE 'a.b'
  784. 1
  785. SELECT 'a\nb' RLIKE '(?-s)a.b';
  786. 'a\nb' RLIKE '(?-s)a.b'
  787. 0
  788. SET default_regex_flags=DEFAULT;
  789. SELECT REGEXP_SUBSTR('Monday Mon','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$');
  790. ERROR 42000: Got error 'two named subpatterns have the same name at offset 29' from regexp
  791. SET default_regex_flags='DUPNAMES';
  792. SELECT REGEXP_SUBSTR('Monday Mon','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$');
  793. REGEXP_SUBSTR('Monday Mon','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$')
  794. Monday Mon
  795. SELECT REGEXP_SUBSTR('Tuesday Tue','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$');
  796. REGEXP_SUBSTR('Tuesday Tue','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$')
  797. Tuesday Tue
  798. SET default_regex_flags=DEFAULT;
  799. SELECT 'AB' RLIKE 'A B';
  800. 'AB' RLIKE 'A B'
  801. 0
  802. SELECT 'AB' RLIKE 'A# this is a comment\nB';
  803. 'AB' RLIKE 'A# this is a comment\nB'
  804. 0
  805. SET default_regex_flags='EXTENDED';
  806. SELECT 'AB' RLIKE 'A B';
  807. 'AB' RLIKE 'A B'
  808. 1
  809. SELECT 'AB' RLIKE 'A# this is a comment\nB';
  810. 'AB' RLIKE 'A# this is a comment\nB'
  811. 1
  812. SET default_regex_flags=DEFAULT;
  813. SELECT 'Aq' RLIKE 'A\\q';
  814. 'Aq' RLIKE 'A\\q'
  815. 1
  816. SET default_regex_flags='EXTRA';
  817. SELECT 'Aq' RLIKE 'A\\q';
  818. ERROR 42000: Got error 'unrecognized character follows \ at offset 2' from regexp
  819. SET default_regex_flags=DEFAULT;
  820. SELECT 'a\nb\nc' RLIKE '^b$';
  821. 'a\nb\nc' RLIKE '^b$'
  822. 0
  823. SET default_regex_flags='MULTILINE';
  824. SELECT 'a\nb\nc' RLIKE '^b$';
  825. 'a\nb\nc' RLIKE '^b$'
  826. 1
  827. SET default_regex_flags=DEFAULT;
  828. SELECT REGEXP_SUBSTR('abc','.+');
  829. REGEXP_SUBSTR('abc','.+')
  830. abc
  831. SELECT REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2');
  832. REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2')
  833. abc/
  834. SET default_regex_flags='UNGREEDY';
  835. SELECT REGEXP_SUBSTR('abc','.+');
  836. REGEXP_SUBSTR('abc','.+')
  837. a
  838. SELECT REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2');
  839. REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2')
  840. /abc
  841. SET default_regex_flags=DEFAULT;
  842. #
  843. # MDEV-6965 non-captured group \2 in regexp_replace
  844. #
  845. SELECT REGEXP_REPLACE('1 foo and bar', '(\\d+) foo and (\\d+ )?bar', '\\1 this and \\2that');
  846. REGEXP_REPLACE('1 foo and bar', '(\\d+) foo and (\\d+ )?bar', '\\1 this and \\2that')
  847. 1 this and that
  848. #
  849. # MDEV-8102 REGEXP function fails to match hex values when expression is stored as a variable
  850. #
  851. # Testing a warning
  852. SET NAMES latin1;
  853. SET @regCheck= '\\xE0\\x01';
  854. SELECT 0xE001 REGEXP @regCheck;
  855. 0xE001 REGEXP @regCheck
  856. 0
  857. Warnings:
  858. Warning 1139 Got error 'pcre_exec: Invalid utf8 byte sequence in the subject string' from regexp
  859. # Testing workaround N1: This makes the pattern to be a binary string:
  860. SET NAMES latin1;
  861. SET @regCheck= X'E001';
  862. SELECT 0xE001 REGEXP @regCheck;
  863. 0xE001 REGEXP @regCheck
  864. 1
  865. # Testing workaround N2: This also makes the pattern to be a binary string, using a different syntax:
  866. SET NAMES latin1;
  867. SET @regCheck= _binary '\\xE0\\x01';
  868. SELECT 0xE001 REGEXP @regCheck;
  869. 0xE001 REGEXP @regCheck
  870. 1
  871. # Testing workarond N3: This makes derivation of the subject string stronger (IMLICIT instead of COERCIBLE)
  872. SET NAMES latin1;
  873. SET @regCheck= '\\xE0\\x01';
  874. SELECT CAST(0xE001 AS BINARY) REGEXP @regCheck;
  875. CAST(0xE001 AS BINARY) REGEXP @regCheck
  876. 1
  877. # MDEV-12420: Testing recursion overflow
  878. SELECT 1 FROM dual WHERE ('Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,StrataCentral,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,StrataL3,November,Oscar,StrataL2,Sand,P3,P4SwitchTest,Arsys,Poppa,ExtensionMgr,Arp,Quebec,Romeo,StrataApiV2,PtReyes,Sierra,SandAcl,Arrow,Artools,BridgeTest,Tango,SandT,PAlaska,Namespace,Agent,Qos,PatchPanel,ProjectReport,Ark,Gimp,Agent,SliceAgent,Arnet,Bgp,Ale,Tommy,Central,AsicPktTestLib,Hsc,SandL3,Abuild,Pca9555,Standby,ControllerDut,CalSys,SandLib,Sb820,PointV2,BfnLib,Evpn,BfnSdk,Sflow,ManagementActive,AutoTest,GatedTest,Bgp,Sand,xinetd,BfnAgentLib,bf-utils,Hello,BfnState,Eos,Artest,Qos,Scd,ThermoMgr,Uniform,EosUtils,Eb,FanController,Central,BfnL3,BfnL2,tcp_wrappers,Victor,Environment,Route,Failover,Whiskey,Xray,Gimp,BfnFixed,Strata,SoCal,XApi,Msrp,XpProfile,tcpdump,PatchPanel,ArosTest,FhTest,Arbus,XpAcl,MacConc,XpApi,telnet,QosTest,Alpha2,BfnVlan,Stp,VxlanControllerTest,MplsAgent,Bravo2,Lanz,BfnMbb,Intf,XCtrl,Unicast,SandTunnel,L3Unicast,Ipsec,MplsTest,Rsvp,EthIntf,StageMgr,Sol,MplsUtils,Nat,Ira,P4NamespaceDut,Counters,Charlie2,Aqlc,Mlag,Power,OpenFlow,Lag,RestApi,BfdTest,strongs,Sfa,CEosUtils,Adt746,MaintenanceMode,MlagDut,EosImage,IpEth,MultiProtocol,Launcher,Max3179,Snmp,Acl,IpEthTest,PhyEee,bf-syslibs,tacc,XpL2,p4-ar-switch,p4-bf-switch,LdpTest,BfnPhy,Mirroring,Phy6,Ptp' REGEXP '^((?!\b(Strata|StrataApi|StrataApiV2)\b).)*$');
  879. 1
  880. Warnings:
  881. Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp
  882. SELECT CONCAT(REPEAT('100,',250),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$';
  883. CONCAT(REPEAT('100,',250),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'
  884. 1
  885. SELECT CONCAT(REPEAT('100,',600),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$';
  886. CONCAT(REPEAT('100,',600),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'
  887. 0
  888. Warnings:
  889. Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp
  890. SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',250),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$');
  891. REGEXP_INSTR(CONCAT(REPEAT('100,',250),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')
  892. 1
  893. SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',600),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$');
  894. REGEXP_INSTR(CONCAT(REPEAT('100,',600),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')
  895. 0
  896. Warnings:
  897. Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp
  898. SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',250/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'));
  899. LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',250/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'))
  900. 335
  901. SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',600/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'));
  902. LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',600/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'))
  903. 0
  904. Warnings:
  905. Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp
  906. SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',250/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', ''));
  907. LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',250/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', ''))
  908. 0
  909. SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',600/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', ''));
  910. LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',600/3),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', ''))
  911. 803
  912. Warnings:
  913. Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp