0

各位正则表达式,

我有一个包含以下表达式的平面文件:

SELECT * FROM CONVENIENT_ONE_LINE_QUERY
"SELECT * FROM THIS_QUERY
WHERE IS_SPREAD_OVER == 123
ORDER BY MULTIPLE_LINES
HAVING AND_IS_BETWEEN_QUOTES"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER

我想消除引号和引号本身之间的 CRLF ,这样我的所有查询都是方便的单行语句:

SELECT * FROM CONVENIENT_ONE_LINE_QUERY
SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING BUT_IS_BETWEEN_QUOTES
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER

请发布解决方案中使用的 RegEx 风格。我正在使用 TextCrawler,它声称是 ECMA262(与 VBScript/Javascript 相同),而我最接近的解决方案是:

(\r\n".*)(.*)\r\n(.*"\r\n)

原谅我的无知。最好的问候, 山猫开普勒

4

2 回答 2

2

"如果下一个在行尾,您可以首先删除所有 CRLF :

result = subject.replace(/\r\n(?=[^"]*"$)/mg, " ");

解释:

\r\n    # Match a CRLF
(?=     # if and only if
 [^"]*  # it is followed by any number of non-quote characters
 "      # and a quote
 $      # at the end of a line
)       # End of lookahead.

这会将您的示例转换为

SELECT * FROM CONVENIENT_ONE_LINE_QUERY
"SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING AND_IS_BETWEEN_QUOTES"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER

在此处输入图像描述

然后,在第二步中,删除引号:

result = subject.replace(/^"|"$/mg, "");
于 2011-05-18T15:48:48.033 回答
0

使用 Perl,您可以执行以下操作:

s/^"([^"]*)"$/$s = $1; $s =~ s!(?:\n|\r)+! !g; $s/meg

于 2011-05-18T15:48:21.487 回答