ホームページ >Java >&#&チュートリアル >正規表現を使用して引用符内のスペースを無視しながらスペースを使用して文字列を分割するにはどうすればよいですか?

正規表現を使用して引用符内のスペースを無視しながらスペースを使用して文字列を分割するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-16 17:25:15427ブラウズ

How to Split a String Using Spaces While Ignoring Spaces Within Quotes Using Regex?

スペースを使用して文字列を分割するための正規表現

文字列を扱うとき、分析や処理のために文字列を個々の単語に分割する必要があることがよくあります。ただし、引用符で囲まれたテキスト内のスペース (例: 「これは文字列です」) は区切り文字とみなされません。正規表現 (Regex) は、このような複雑な分割タスクを処理する強力な方法を提供します。

質問:

囲まれたスペースを無視して、スペースを使用して文字列を分割する正規表現を作成します。シングルまたはダブルでquotes.

例:

入力: 「これは、'正規表現' が何かに一致したときに強調表示される文字列です。」

望ましい出力:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.

答え:

(?!") の指定された式は正しく分割されませんが、包括的な正規表現は次のように定式化できます。

この式は、2 つのタイプの要素:

  • 引用符で囲まれていない単語: [^s"'] は、スペースや引用符のない一連の文字と一致します。
  • 引用符付きテキスト:

    • /"([^"]*)"/ は、引用符を除く二重引用符で囲まれたテキストと一致します。
    • /'([^']*) '/ も同様に、単一引用符で囲まれたテキストに一致します。

Java 実装:

次の Java コードは、この正規表現を適用して、 string:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexSplitter {

    public static void main(String[] args) {
        String subjectString = "This is a string that \"will be\" highlighted when your 'regular expression' matches something.";

        // Pattern that matches unquoted words, quoted texts, and the capturing groups
        Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
        Matcher regexMatcher = regex.matcher(subjectString);

        // List to store the split words
        List<String> matchList = new ArrayList<>();

        while (regexMatcher.find()) {
            // Check for capturing groups to exclude quotes
            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());
            }
        }

        // Display the split words
        for (String word : matchList) {
            System.out.println(word);
        }
    }
}

Output:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something

この拡張された説明では問題が明確になり、より正確で包括的な正規表現と詳細な Java 実装が提供されます。その使用法を説明します。

以上が正規表現を使用して引用符内のスペースを無視しながらスペースを使用して文字列を分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。