仅匹配指定字符的最后一次出现的正则表达式

Posted

技术标签:

【中文标题】仅匹配指定字符的最后一次出现的正则表达式【英文标题】:Regular expression that matches only the last occurrence of a specified character 【发布时间】:2015-08-23 19:31:54 【问题描述】:

我需要创建一个正则表达式,以便用于从动态 SQL 创建表语句中删除最后一个逗号。我的查询基本上获取所有列名和表名并返回如下内容:

CREATE TABLE table_name ( column1 DATATYPE(1), column2 DATATYPE(20),);

我在 data_length 规范之后将逗号连接到所有,因为之后删除最后一个逗号会更容易。我正在使用REGEXP_REPLACE 来做到这一点,但是由于 Oracle 不支持前瞻或后瞻,所以我不能使用这个工作正常的表达式:

\,(?=[);])\

所以我得到了另一个表达式:

\(\);)?,\

但它不够精确,因为它需要“);”之前的所有逗号,我需要它来获取 create table 语句中的最后一个逗号。

我正在为此使用 PLSQL。

【问题讨论】:

由于正则表达式引擎匹配greedy,我会尝试\(,)\);\ 几乎,但不,它匹配 ',);' 逗号在捕获组 1 中,但是顺便说一句,你为什么不简单地将 ,); 替换为 ); ?就是这样。 我没有考虑到这一点,我想这样做可能比继续这个麻烦更容易。我不认为有办法将评论作为答案吗? 你能测试一下吗?不幸的是,我没有测试环境。 (另外你没有命名编程语言;)(请补充)如果它有效,我会做出并回答它。 【参考方案1】:

简单地将,); 替换为); 怎么样?这将有效地删除右括号之前的最后一个逗号。

【讨论】:

以上是关于仅匹配指定字符的最后一次出现的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 正则表达式仅选择最后一次出现

正则表达式:匹配字符的第一次出现

如何用正则表达式匹配指定字符开始和指定字符结束?

oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?

JavaScript重点记忆

正则表达式以啥结尾