雷吉斯兄弟,
我有一个平面文件,里面满是表达式,比如:
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)原谅我的n00biness。向你问好,林克斯·开普勒
发布于 2011-05-18 15:48:48
如果下一个"位于行尾,则可以首先删除所有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-18 15:48:21
使用Perl,您可以执行如下操作:
s/^"([^"]*)"$/$s = $1; $s =~ s!(?:\n|\r)+! !g; $s/meg
https://stackoverflow.com/questions/6046708
复制相似问题