programing

REGEXP_REplace with MySQL 또는 MariaDB가 와일드카드 일치를 사용하여 빈 문자열을 바꾸지 않음

batch 2023. 9. 3. 12:23
반응형

REGEXP_REplace with MySQL 또는 MariaDB가 와일드카드 일치를 사용하여 빈 문자열을 바꾸지 않음

(MySQL/MariaDB에서 테스트됨):

이로 인해 빈 문자열이 생성되는 이유는 무엇입니까?

SELECT REGEXP_REPLACE('', '.*', 'hello');

이것도 마찬가지입니다.

SELECT REGEXP_REPLACE('', '(.*)', '\\1 hello');

반면에, 같은 정규식을 가진 REGEXP를 빈 필드에 적용하면, 예를 들어 열과 일치합니다.

SELECT uid,f1 FROM table1 WHERE f1 REGEXP '.*' and uid=1;


+-----+-----+
| uid | f1  |
+-----+-----+
|   1 |     |
+-----+-----+

일치한다면, 그것도 교체되어야 한다고 생각합니다.다른 정규 표현식 엔진은 다음과 같이 작동합니다.

echo "" | perl -p -e "s/.*/hello/"
hello

에 테스트된.

  • MySQL 8.0.26
  • MariaDB 10.4.19

REGEXP_REPLACE와 함께 작업하던 중 이 사실을 알게 되었습니다.예제가 단순화되었습니다.

언급URL : https://stackoverflow.com/questions/68682251/regexp-replace-with-mysql-or-mariadb-does-not-replace-empty-string-using-a-wildc

반응형