Rumah >Java >javaTutorial >Bagaimana untuk Memisahkan Rentetan Menggunakan Ruang Sambil Mengabaikan Ruang Dalam Petikan Menggunakan Regex?

Bagaimana untuk Memisahkan Rentetan Menggunakan Ruang Sambil Mengabaikan Ruang Dalam Petikan Menggunakan Regex?

Susan Sarandon
Susan Sarandonasal
2024-12-16 17:25:15427semak imbas

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

Regex untuk Memisahkan Rentetan Menggunakan Ruang

Apabila bekerja dengan rentetan, kita selalunya perlu membahagikannya kepada perkataan individu untuk analisis atau pemprosesan. Walau bagaimanapun, ruang dalam teks yang dipetik (cth., "Ini adalah rentetan") tidak boleh dianggap sebagai pemisah. Ungkapan biasa (Regex) menawarkan cara yang berkuasa untuk mengendalikan tugas pemisahan yang kompleks itu.

Soalan:

Buat ungkapan Regex untuk membelah rentetan menggunakan ruang, mengabaikan ruang yang dikelilingi secara tunggal atau berganda petikan.

Contoh:

Input: "Ini ialah rentetan yang "akan" diserlahkan apabila 'ungkapan biasa' anda sepadan dengan sesuatu."

Diingini Output:

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

Jawapan:

Walaupun ungkapan (?!") yang disediakan tidak berpecah dengan betul, ungkapan Regex yang komprehensif boleh dirumuskan seperti berikut:

Ungkapan ini secara berkesan menangkap dua jenis elemen:

  • Perkataan Tidak Dipetik: [^s"'] sepadan dengan urutan aksara tanpa ruang atau petikan.
  • Teks Dipetik:

    • /"([^"]*)"/ perlawanan teks petikan dua kali, tidak termasuk petikan.
    • /'([^']*)'/ sama sepadan dengan teks petikan tunggal, tidak termasuk petikan.

Pelaksanaan Java:

Kod Java berikut menggambarkan cara menggunakan ini Regex untuk memisahkan rentetan:

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

Perbincangan yang dipertingkatkan ini menjelaskan masalah dan menyediakan ungkapan Regex yang lebih tepat dan komprehensif, bersama-sama dengan pelaksanaan Java terperinci untuk menunjukkan penggunaannya.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Menggunakan Ruang Sambil Mengabaikan Ruang Dalam Petikan Menggunakan Regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn