Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么这种替换也会删除空白字符?_Regex_Perl - Fatal编程技术网

Regex 为什么这种替换也会删除空白字符?

Regex 为什么这种替换也会删除空白字符?,regex,perl,Regex,Perl,我正在编写一个脚本来从文件中提取和转换SQL语句。我需要将从gupta sqlbase数据库卸载的sql转换为SQLServer能够理解的sql 一项任务是用兼容的名称替换不允许作为列名的关键字 在下面的代码中,$commands是一个包含sql语句的数组引用。(这里实际上有更多的代码,但我提取了它,因为它在这里不应该相关) 这适用于大多数语句,但在以下命令中,“DEFAULT”被替换为“\u DEFAULT”,而不是“\u DEFAULT”。因此第二个引号丢失 CREATE TABLE S

我正在编写一个脚本来从文件中提取和转换SQL语句。我需要将从gupta sqlbase数据库卸载的sql转换为SQLServer能够理解的sql

一项任务是用兼容的名称替换不允许作为列名的关键字

在下面的代码中,$commands是一个包含sql语句的数组引用。(这里实际上有更多的代码,但我提取了它,因为它在这里不应该相关)

这适用于大多数语句,但在以下命令中,
“DEFAULT”
被替换为
“\u DEFAULT”
,而不是
“\u DEFAULT”
。因此第二个引号丢失

  CREATE TABLE SYSADM.SUBTYPE ( ID_SUBTYPE INTEGER NOT NULL, 
  ID_TYPE INTEGER NOT NULL, 
  TYPE VARCHAR(1), 
  BEZEICH VARCHAR(60), 
  NUM_COLOR INTEGER, 
  NUM_TXTCOLOR INTEGER, 
  "DEFAULT" SMALLINT, 
  GENER_ARBA SMALLINT, 
  PROJEKTPLANUNG SMALLINT)
是否有方法修改正则表达式/子项,使其不会删除第二个引号?或者有其他方法?

[^(]
匹配任何非左开头的字符

您希望改用负的零宽度先行断言:

s/\b$kw\b(?!\()/_$kw/gi;
(或者:
(?![(])

还可以将替换的字符添加回字符串:

s/\b$kw\b([^(])/_$kw$1/gi;
但请注意,这并非在所有情况下都有效。特别是如果关键字后没有任何内容,则此模式将不匹配,而零宽度断言将匹配。

[^(]
匹配任何非左开头的字符

您希望改用负的零宽度先行断言:

s/\b$kw\b(?!\()/_$kw/gi;
(或者:
(?![(])

还可以将替换的字符添加回字符串:

s/\b$kw\b([^(])/_$kw$1/gi;
但请注意,这并不是在所有情况下都有效,特别是如果关键字后面没有任何内容,则此模式将不匹配,而零宽度断言将匹配