0

仲間のRegexers、

次のような式でいっぱいのフラットファイルがあります。

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を許してください。よろしく、Lynx Kepler

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

ここに画像の説明を入力してください

次に、2番目のステップで、引用符を削除します。

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 に答える