> Java > java지도 시간 > Regex를 사용하여 따옴표 안의 공백을 무시하면서 공백을 사용하여 문자열을 분할하는 방법은 무엇입니까?

Regex를 사용하여 따옴표 안의 공백을 무시하면서 공백을 사용하여 문자열을 분할하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-16 17:25:15
원래의
427명이 탐색했습니다.

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

공백을 사용하여 문자열을 분할하는 정규식

문자열 작업을 할 때 분석이나 처리를 위해 문자열을 개별 단어로 분할해야 하는 경우가 많습니다. 그러나 인용된 텍스트 내의 공백(예: "이것은 문자열입니다.")은 구분 기호로 간주되어서는 안 됩니다. 정규식(Regex)은 이러한 복잡한 분할 작업을 처리하는 강력한 방법을 제공합니다.

질문:

둘러싸인 공백을 무시하고 공백을 사용하여 문자열을 분할하는 Regex 표현식을 만듭니다. 싱글 또는 더블로 quote.

예:

입력: "'정규 표현식'이 항목과 일치할 때 "강조 표시될" 문자열입니다."

원함 출력:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.
로그인 후 복사

답변:

제공된 표현식 (?!")이 올바르게 분할되지 않지만 포괄적인 Regex 표현식은 다음과 같이 공식화될 수 있습니다.

이 표현은 두 가지 유형을 효과적으로 포착합니다. 요소:

  • 따옴표가 없는 단어: [^s"']는 공백이나 따옴표가 없는 일련의 문자와 일치합니다.
  • 인용 텍스트:

    • /"([^"]*)"/ 일치 따옴표를 제외한 큰따옴표 텍스트.
    • /'([^']*)'/는 따옴표를 제외하고 작은따옴표 텍스트와 유사하게 일치합니다.

Java 구현:

다음 Java 코드는 이 Regex를 다음에 적용하는 방법을 보여줍니다. 문자열 분할:

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);
        }
    }
}
로그인 후 복사

출력:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something
로그인 후 복사

이 향상된 토론은 문제를 명확하게 하고 자세한 설명과 함께 보다 정확하고 포괄적인 Regex 표현식을 제공합니다. 사용법을 보여주기 위한 Java 구현입니다.

위 내용은 Regex를 사용하여 따옴표 안의 공백을 무시하면서 공백을 사용하여 문자열을 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿