mysql正则表达式获取匹配的第一个字母字符的位置

标签 mysql regex string trim

我有一个使用 REGEXP 的 mysql 查询,该查询将字段的开头与“A”、“An”和“The”相匹配,如果匹配则后跟空格,然后从第一个空格的开头修剪字段,然后匹配字段的开头带有特殊字符,如 (','',[:space:]) 如果是,则修剪所有前导特殊字符。 Mysql 查询使用 CASE 如下:

CASE
  WHEN field_data_field_display_title_field_display_title_value REGEXP '(^(A|An|The)[[:space:]])' = 1 THEN
  TRIM(SUBSTR(field_data_field_display_title_field_display_title_value , INSTR(field_data_field_display_title_field_display_title_value ,' ')))
  WHEN field_data_field_display_title_field_display_title_value REGEXP '(^[\"\'[:space:]])' = 1 THEN
    TRIM(SUBSTR(field_data_field_display_title_field_display_title_value ,2))
  ELSE field_data_field_display_title_field_display_title_value
END

我无法修剪所有前导特殊字符,但我可以通过在 SUBSTR 函数中传递“2”来修剪第一个前导特殊字符。由于mysql不支持捕获组,所以我无法获取捕获组中的匹配值。

所以我的问题是如何使用 mysql 查询获取字段中第一个字母字符的位置,以便我可以在 SUBSTR 函数中传递该位置以修剪所有前导特殊字符。我尝试使用 [:alpha:] 类,例如:

TRIM(SUBSTR(field_data_field_display_title_field_display_title_value ,
 INSTR(field_data_field_display_title_field_display_title_value ,[:alpha:])))

但是它给出了 mysql 语法错误。或者任何人都可以建议我任何其他方法来修剪所有领先的特殊字符。

提前致谢!

最佳答案

我正在使用我在 ORDER BY 子句中发布的相关 mysql 片段来对数据进行排序。由于我有一小部分想要删除的比赛,所以我遵循了@BillKarwin 的建议。 查询中的 ORDER BY 子句变成类似

ORDER BY 
  CASE
    WHEN field_data_field_display_title_field_display_title_value REGEXP '^(A|An|The)[[:space:]]' = 1 THEN
      TRIM(SUBSTR(field_data_field_display_title_field_display_title_value , INSTR(field_data_field_display_title_field_display_title_value ,' ')))
    WHEN field_data_field_display_title_field_display_title_value REGEXP '^[\']' = 1 THEN
      TRIM(LEADING '\'' FROM field_data_field_display_title_field_display_title_value)
    WHEN field_data_field_display_title_field_display_title_value REGEXP '^[[:space:]]' = 1 THEN
      TRIM(LEADING ' ' FROM field_data_field_display_title_field_display_title_value)
    WHEN field_data_field_display_title_field_display_title_value REGEXP '^[\"]' = 1 THEN
      TRIM(LEADING '"' FROM field_data_field_display_title_field_display_title_value)
    ELSE field_data_field_display_title_field_display_title_value
  END ASC

关于mysql正则表达式获取匹配的第一个字母字符的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848117/

相关文章:

MySQL:统一选择是否总是比单独的简单选择更快?

python - python 中的 re.sub 有时不起作用

java - 由于转义序列错误,无法在 Java 中使用正则表达式,如何消除错误

mysql - MySQL数据库数据迁移到SQL Server

php - 如何使用 Eloquent 和 MySQL 按 last id 对分组结果进行排序?

python - 尝试在Python中以特殊格式在字符串中查找带有通配符整数的文本

c++ - 三元运算符中的 Cout String 和 int

c - Strncpy 在字符串末尾给出不需要的字符

c - 在 C 中反转字符串时出现运行时错误

mysql - 在这种情况下我应该使用面向对象的方法来设计数据库表吗