2010-02-17 8 views
0

유효한 문자열을 수정하는 정규식을 만드는 데 문제가 있습니다.쉼표로 구분 된 영숫자 문자열의 정규식

문자열은 형식이어야합니다 : 쉼표 다음에 알파 - 숫자 문자 3 ~ 5 배, 이상의 문자 다른 그것 문자열의 끝

예 끈 후가있는 경우 : A401, CR56,4U9Y, MO16, ECZGB, A7DC, 9LN5, D52PU, UT95, YBPB0,2JWA, AAMW, KVG, 6V8W, FWE

TRIR, J107, Q9X, FMFZ, VDAS, 557, X7A, DRPB, S97O , 8U62B, IN3I, H8MC, WS4C, U04KQ, X05O.

몇 가지 다양한 표현식을 시도했지만 유효하지 않은 항목이있는 경우 일치하지 않는 항목은 없습니다. 나는 문자열을 폭발시킬 수 있고 배열을 반복 할 수 있다는 것을 알지만, 꽤 쉬운 것처럼 보이는 것처럼 하나의 표현식에서 이것을하려고 노력하지만 꽤 알아낼 수는 없습니다.

Exmaple 패턴

echo preg_match("/^([A-Z0-9]{3,5})[,|$]{1,}/",$str); 
echo preg_match("/((?<=[^|,])([A-Z0-9]{3,5}){1}(?=[,|$])){1,}/",$str); 

다양한 그들에 변화,하지만 난 꽤 승리 패턴, 감사 모든 도움을 찾을 수 없습니다.

echo preg_match("/^([A-Z0-9]{3,5}(?:,|$))+/",$str); 
+2

"어떤 사람들은 문제에 직면 할 때, 생각 : '알아, 정규 표현식을 사용할거야.' 이제는 두 가지 문제가 있습니다. " –

+4

"어떤 사람들은 정규 표현식에 직면 할 때"기억합니다. 나는 기억하고있는 말투를 사용하겠다 "고 생각합니다. 이제 그들은 토론에 아무것도 추가하지 않았습니다." '- Tomalak' –

+0

그리고 많은 사람들이 열심히 질문을받습니다. 그래서 질문이 마침내 나오면 40 초 내에 4-5 개의 대답이 있습니다 :) – Amarghosh

답변

2
/^[A-Z0-9]{3,5}(?:,[A-Z0-9]{3,5})*$/ 
+0

약간 불필요하게 중복됩니다. – brianary

2
/^([a-z0-9]{3,5},)*[a-z0-9]{3,5}$/ 
+0

재밌는 마음 다르게 : 나는 KennyTM과 같은 것을 가지고 있었지만 단 하나의'[a-z0-9] {3,5}'를 오른쪽으로 치기로했다. 너희 둘에게 +1. –

-1

(\w{3,5})[,.]? 
+0

'[, | $]'은 쉼표, 수직 막대 또는 달러 기호와 일치합니다. Perl 6에서 작업하지 않는 한 그룹핑은 여전히'(? : ...)'입니다. – kennytm

+0

아니요,'[, | $]'는',','|'또는'$'중 하나와 일치합니다. 쉼표 또는 문자열의 끝과 일치하지 않습니다. –

+0

그걸 놓친, 나는 부적절하게 중첩 된 괄호를 고치고 있었다. 틀린 괄호에 주목하지 않았다. 결정된. – brianary

0

이 나를 위해 작동합니다 : 시도가

건배, 싸이

+0

이것은'___. '와 일치합니다. – kennytm

+0

"문자열은 3 자리에서 5 자리까지의 영숫자 문자 다음에 쉼표가있는 경우 그 뒤에 문자열이 더 나옵니다"형식으로 표시됩니다. 따라서 ___이 (가) 없습니다. 과용 할 이유가 없습니다. – PeterM

관련 문제