문자열에서 이름/값 쌍을 구문 분석하기 위해 정규 표현식을 제공 할 수 있습니까? 쌍은 쉼표로 구분되며, 값은 선택적으로 따옴표로 묶을 수 있습니다. 예를 들면 :이름 값 쌍을 파싱하는 정규식
AssemblyName=foo.dll,ClassName="SomeClass",Parameters="Some,Parameters"
문자열에서 이름/값 쌍을 구문 분석하기 위해 정규 표현식을 제공 할 수 있습니까? 쌍은 쉼표로 구분되며, 값은 선택적으로 따옴표로 묶을 수 있습니다. 예를 들면 :이름 값 쌍을 파싱하는 정규식
AssemblyName=foo.dll,ClassName="SomeClass",Parameters="Some,Parameters"
탈출하지 :
/((?:"[^"]*"|[^=,])*)=((?:"[^"]*"|[^=,])*)/
key=value,"key with "" in it"="value with "" in it",key=value" "with" "spaces
백업합니다 : 키와 값 모두
/([^=,]*)=("[^"]*"|[^,"]*)/
따옴표 탈출 속눈썹 문자열 회피 :
/([^=,]*)=("(?:\\.|[^"\\]+)*"|[^,"]*)/
key=value,key="value",key="val\"ue"
전체 백 슬래시 이스케이프 :
/((?:\\.|[^=,]+)*)=("(?:\\.|[^"\\]+)*"|(?:\\.|[^,"\\]+)*)/
key=value,key="value",key="val\"ue",ke\,y=val\,ue
편집 : 추가 탈출 대안.
편집 2 : 다른 탈출 대안을 추가했습니다.
이스케이프 문자 및 주위 인용 부호를 제거하여 키/값을 정리해야합니다.
좋은 대답은 MizardX입니다. 사소한 중독 - 이름 등 (공란은 아님) 주위의 공백을 허용하지 않으며 따옴표로 묶은 값 (중요하지 않을 수도 있음)과 따옴표를 수집하며 포함을위한 이스케이프 메커니즘이 없습니다 따옴표로 묶인 값의 큰 따옴표 문자 (한 번 더 중요하지 않음).
작성된대로이 패턴은 대부분의 확장 정규 표현식 시스템에서 작동합니다. niggles를 고치려면 아마도 Perl을 사용해야 할 것입니다.
/\s*([^=,\s]+)\s*=\s*(?:"((?:[^"]|"")*)"|([^,"]*))\s*,?/
: 그러므로 = "A" "B '는"B "는 필드 값 생성"'(완벽하지,하지만 나중에 충분히 쉽게 고정 할 수 있음) -이 버전은 탈출 따옴표를 두 배로 사용합니다
또한 MizardX의 대답을 사용하면 $ 2 또는 $ 3을 사용하여 값을 수집해야합니다. 그래서, 쉽지도 좋지는 않지만 몇 가지 엣지 경우를 다룹니다. 간단한 대답이 적절한 경우 사용하십시오.
테스트 스크립트 :
#!/bin/perl -w
use strict;
my $qr = qr/\s*([^=,\s]+)\s*=\s*(?:"((?:[^"]|"")*)"|([^,"]*))\s*,?/;
while (<>)
{
while (m/$qr/)
{
print "1= $1, 2 = $2, 3 = $3\n";
$_ =~ s/$qr//;
}
}
이 중 하나를 $ 2 또는 $ 3 정의되지 않은 것에 대해 witters - 정확하게.
Perl 5.10
을 사용할 수 있다면 이렇게 할 수 있습니다.
qr/ (?<key> (?: [^=,\\] | (?&escape) )++ # Prevent null keys ) \s*+ = \s*+ (?<value> (?"ed) | (?: [^=,\s\\] | (?&escape) )++ # Prevent null value (use quotes for that) ) (?(DEFINE) (?<escape>\\.) (?<quoted> " (?: (?&escaped) | [^"\\] )*+ " ) ) /x
요소는 %+
을 통해 액세스됩니다.
perlretut
이 대답을 만드는 데 매우 도움이되었습니다.
내 간단한 시나리오에서 작동합니다. 하지만, 이중 따옴표 ("") 또는 백 슬래시 (\ ")를 사용하여 값을 인용 부호로 묶는 것이 좋을 수도 있습니다. –
제발 도와주세요. 비슷한 것이지만 json http와 더 비슷한 것이 필요합니다. : //stackoverflow.com/questions/6099891/json-text-split-reg-expression-or-parser – Val
key = value & key = value에 대한 정규식은 어디입니까? key 또는 value는 null 일 수 있으며, key 및 value는 임의 일 수 있습니다. – virsha