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
Lepaskan: 2024-12-16 17:25:15
asal
426 orang telah melayarinya

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.
Salin selepas log masuk

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);
        }
    }
}
Salin selepas log masuk

Output:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan