배열처럼 보이는 문자열과 일치하는 정규식을 만들려고합니다. 시작과 끝 사용 같은 브래킷 (예 : (....}
괜찮) 경우문자열을 배열과 일치시키는 정규 표현식
- 는
- 항목은
- 문제가되지 않습니다
(
로 시작해야 쉼표로 구분되어 있습니다.- 모든 공백 유형은 무시됩니다.
- 빈 배열은 내가 처음 생각 해낸
]
,
}
, 또는
)
로 끝나야합니다
[
,
{
또는
을 접수 불행하게도이 빈 상태 (empty)의 배열을 허용하지 않습니다
'/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*/'
했다. 그래서이 하나 빈 어레이를 허용 할뿐만 아니라 개구 브래킷 (예컨대 [, item, item]
) 후 콤마 시작 배열을 허용 다른
'/\s*[\[|\{|\(][\s*\w+\s*]?[,\s*\w+]*\s*[\]|\}|\)]\s*/'`
시도.
현재 내가하고있는 일은 두 개의 서로 다른 정규 표현식을 사용하여 하나 또는 다른 것이 일치하는지 확인하는 것입니다. 다른 정규 표현식은 앞에서 언급 한 첫 번째 정규 표현식과 유사하지만 여는 마커와 닫는 마커 사이에 0 개 이상의 공백 문자 만 허용합니다.
어떤 이유에서 나는 괄호가 하위 패턴을 캡처하여 대안을 나열하는 데 사용할 수 있다는 사실을 알지 못하게한다는 사실을 알려줍니다. 마찬가지로 대괄호를 중첩시킬 수 있습니까? 아니면 대신 괄호를 사용하는 이유입니까? – Matt
@Matt에 익숙한 모든 정규식 시스템에서 []은 [a-z0-9_]와 같은 범위에서만 사용됩니다. 그들은 둥지를 짓거나 집단화하지 않습니다.()는 산술 (1 + 2) * 3 대 1 + 2 * 3과 마찬가지로 캡처 및 연산자 순서를 수정하는 데 사용됩니다.()는 중첩 될 수 있습니다. 주어진 쌍의()의 캡처 부분은 종종 비활성화 될 수 있습니다 (예 : perl의 (? : expression)). – walrii