단일 또는 이중 인용문으로 키워드 = 'value'를 구문 분석하기 위해 regex가 필요합니다.

StackOverflow https://stackoverflow.com/questions/962120

  •  12-09-2019
  •  | 
  •  

문제

나는 Keyword = 'value'쌍을 구문 분석하는 정규 표현식 (PHP의 preg_match ()에 적합)를 작성하는 데 어려움이 있습니다 (u003Cvalue> 문자열은 단일 또는 이중 인용문으로 동봉됩니다. iow 다음 두 경우 모두u003Cname> 그리고u003Cvalue> 어디에u003Cvalue> 문자열은 인한 가입이없는 유형의 인용문을 포함 할 수 있습니다.

name="value"
name='value'
도움이 되었습니까?

해결책

Perl에서 이것은 작동하는 정규 표현입니다. 먼저 라인의 시작을 위해 일치 한 다음 하나 이상의 비 = 캐릭터와 일치하여 $ 1로 설정합니다. 다음으로 "또는 '에 대해 일치하는 선택이있는 괄호가 = 2 달러로 설정합니다.

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/

원한다면 빈 표현과 같은 빈 표현을 원한다면.

이 = ""

마지막 두 +를 * *로 교체하십시오. 그렇지 않으면 작동해야합니다.

편집하다의견에서 언급했듯이. Doug를 사용했습니다 ...

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/

이것은 입력 또는 값의 에테르 끝에서 하나의 옵션 공백과 일치하며 라인 마커의 끝을 제거했습니다.

다른 팁

/^(\w+?)=(['"])(\w+?)\2$/

키를 배치합니다 $1 그리고 가치 $3.

몇 년 늦었지만이 질문은 Google에서 높은 순위를 매기고 답이 내 요구를 충족시키지 못했기 때문에 여기에 또 다른 것이 있습니다. 표현:

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2

이는 탈출 된 인용문과 인용되지 않은 값을 고려하여 단일 또는 이중 인용문과 일치합니다.

name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""

그러나 값이 다음 키/값 쌍의 키가 누락 된 경우 제한이 있습니다. 이것은 a를 사용하여 해결할 수 있습니다 쉼표 분리 목록 키/값 쌍의.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top