인용 된 문자열 목록과 일치 시키려하고 인용 된 부분 문자열을 얻으려고합니다. PHP의 preg_match_all
은 인용 문자열의 유효성을 검사하지만 반환 된 "$ matches"에는 인용 된 하위 문자열이 모두 포함되지 않습니다. 일반적으로 첫 번째와 마지막을 반환합니다.PHP에서 모든 일치 항목을 얻으려고 시도했습니다. preg_match_all
식의 구성 요소에 이름을 (?P<name>)
할당하려고 시도했지만 결과가 중복되어 나타나는 것으로 보입니다. 여전히 인용 된 하위 문자열을 모두받지 못합니다.
DEFINE
을 사용하여 구성 요소의 서브 루틴을 작성해도 결과가 향상되지 않았습니다.
다음은 일치시키려는 입력의 예입니다.
'abcd','efgh"ij','list,543','Brown fox.','left(paren','right)paren'
다음은 내가 사용하고있는 표현입니다. 문자열은 작은 따옴표로만 인용됩니다.
/(?x)^ (\x27[^\x27]*\x27) (,(\x27[^\x27]*\x27))* $/
처럼 preg_match_all
에 대한 호출은 같습니다
$pregex = '/(?x)^ (\x27[^\x27]*\x27) (,(\x27[^\x27]*\x27))* $/';
echo 'Match result: '.preg_match_all($pregex, $text_list, $matches, PREG_PATTERN_ORDER)."\n";
실행 후, $ 일치
가 포함되어 있습니다. "브라운 여우"나는 문자열로 주목Array
(
[0] => Array
(
[0] => 'abcd','efgh"ij','list,543','Brownfox.','left(paren','right)paren'
)
[1] => Array
(
[0] => 'abcd'
)
[2] => Array
(
[0] => ,'right)paren'
)
[3] => Array
(
[0] => 'right)paren'
)
)
을 ... "Brownfox."로 변경되었습니다. 문제가되며 인용 된 하위 문자열을 모두 나열하지 않습니다. 내가보고 싶은 무엇
이 (가 반환 된 문자열의 시작 부분에는 쉼표가 없지만, 그들이 거기이어야합니다, 그렇게 될 통지) 같은 것입니다 :
이Array
(
[0] => Array
(
[0] => 'abcd','efgh"ij','list,543','Brownfox.','left(paren','right)paren'
)
[1] => Array
(
[0] => 'abcd'
)
[2] => Array
(
[0] => 'efgh”ij'
)
[3] => Array
(
[0] => 'list,543'
)
[3] => Array
(
[0] => 'Brown fox.'
)
[3] => Array
(
[0] => 'left(paren'
)
[3] => Array
(
[0] => 'right)paren'
)
)
것 같아요 내 질문은 :
- preg_match_all을 사용하여 원하는 것을 달성 할 수 있습니까?
- 가능하다면 무엇을 잘못하고 있습니까? 아니면 내가 이해하지 못하는 부분이 있습니까? ?
- 가능한 경우 파싱을 수행하려면 어떻게해야합니까?
고마워요!
'$ string = explode (',', $ string); preg_match_all ("~ '([^')] $ string = array_map ('trim', $ string, array_fill (0, count ($ string), ''")); ' –
또는 정규 표현식을 사용하고 싶다면, ] +) '~', $ string, $ matches); print_r ($ matches); ' –
고마워! 나는 그것을 시도 할 것이다! 나는 "~"이 무엇인지 모르겠다. 그러나 나는 그것을 찾을 것이다. – John