[解決済み] シングルクォートまたはダブルクォートで囲まれていない場合に、スペースを使って文字列を分割するための正規表現
2022-07-31 23:26:23
質問
正規表現に慣れていないので、教えてください。 私は、シングルまたはダブルクォートで囲まれていないすべてのスペースを使用して、例の文字列を分割する式をまとめようとしています。私の最後の試みは次のようになります。
(?!")
のようになり、うまくいきません。引用符の前のスペースで分割されています。
入力例です。
This is a string that "will be" highlighted when your 'regular expression' matches something.
希望する出力
This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.
なお
"will be"
と
'regular expression'
は単語と単語の間のスペースを保持します。
どのように解決するのですか?
他の人たちがなぜこのような複雑な正規表現や長いコードを提案するのか理解できません。 本質的に、あなたは文字列から 2 種類のものを取得したいのです: スペースまたは引用符以外の文字のシーケンス、および 2 種類の引用符のために、間に引用符を含まない、引用符で始まり、終了する文字のシーケンスです。 この正規表現を使えば、これらのものに簡単にマッチさせることができます。
[^\s"']+|"([^"]*)"|'([^']*)'
リストに引用符があると困るので、キャプチャグループを追加しました。
このJavaコードはリストを構築し、引用符を除外するためにマッチした場合は捕捉グループを追加し、捕捉グループがマッチしなかった場合(引用符のない単語がマッチした)には全体の正規表現マッチを追加しています。
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
// Add double-quoted string without the quotes
matchList.add(regexMatcher.group(1));
} else if (regexMatcher.group(2) != null) {
// Add single-quoted string without the quotes
matchList.add(regexMatcher.group(2));
} else {
// Add unquoted word
matchList.add(regexMatcher.group());
}
}
もし、返されるリストに引用符があることを気にしないのであれば、もっと簡単なコードを使うことができます。
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
関連
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
Junitのユニットテストはjava.lang.Testを報告します。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Java:未解決コンパイル問題の解決方法
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題
-
[解決済み] 複数のスペースを1つのスペースに置き換える正規表現
-
[解決済み】空白で文字列を分割する -- クォートされた部分文字列を保持する -- Pythonで
-
[解決済み】RegExp.execを使って文字列からすべてのマッチを抽出するRegEx
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
Junitのユニットテストエラー
-
switch case文のcaseの後の列挙定数は列挙型なし