引用符で囲まれたセグメントを除くスペースを含む文字列の分割
正規表現の領域において、引用符で囲まれたセグメントを保持しながら文字列をスペースで分割するタスク初心者ユーザーにとっては気が遠くなるかもしれません。この課題に対処するために、私たちは入力文字列をその構成要素に正確に分離する堅牢なソリューションを模索しています。
ここで提供される文字列の例は、スペースで単語が区切られているが、一重引用符または二重引用符のセグメント内では区切られていない特定のケースを示しています。目的の出力では、引用符で囲まれたこれらのセグメントが保持され、「will be」や「正規表現」などのフレーズがそのまま残ることが保証されます。
このタスクに適した正規表現は、驚くほど簡単です。
[^\s"']+|"([^"]*)"|'([^']*)'
この式を分解すると、
Java でこの式を利用するには、次の式を使用できます。 code:
List<String> matchList = new ArrayList<>(); 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<>(); Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
この簡略化されたバージョンには、リストに引用符で囲まれた要素と引用符で囲まれていない要素の両方が含まれています。
以上が正規表現を使用して引用符で囲まれたセグメントを保持しながら文字列をスペースで分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。