2013-08-14 5 views
0

나는 다음 문자열이 있습니다 (? 컴파일러가 아닌 거의 같은) 내가 잘못된 입력을 삽입에서 사용자를 유지하는 정규식을 쓰기 위해 노력하고있어Regex, 처음 실패하는 방법?

"xya", "yyy", "zzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 

합니다.

가장 먼저 일치 시키려고하는 것은 "xya"입니다. 이 큰 따옴표 그룹 안에는 x/y/z 또는 3 자 이내의 공백 만 사용할 수 있습니다. 따라서 유효한 입력은 "xxx"또는 "xyz"또는 "x"입니다 (예, 이것은 Minecraft 제조법입니다).

\s*([\"][xyz]{3}[\"][,]) 
그것은 , "yyy" 일치

"zzz",,하지만 난 "XYA"는 유효한 입력하지 않기 때문에 그것을 중단하고 싶지만, 엔진이 모든 통해 검색 유지 :

내가 지금까지 가지고있는 정규식 문자열.

먼저 정규식을 테스트하기 위해 Rad Software Regular Expression Designer을 사용하고 있습니다.

+0

다음과 같이 나타났습니다 : [xyz] + {1, 3} | [xyz] + \ s {1,2}) [ "] – Jh62

+1

당신은 결국 정규식을 무엇으로 사용할 것입니까? (언어 또는 환경) 일부는 모든 일치 항목이 인접 해 있는지 확인하는'\ G' 앵커를 제공합니다. –

+0

Java. 이미 프로그램이 있지만, 사용자가 잘못된 입력을하지 못하게하려면이 정규식이 필요합니다. – Jh62

답변

1

실패로 즉시 중단하려면 잘못된 입력을 검색하는 것이 어떨까요? 귀하의 기준에 부합하지 않은 항목에 대해 다음 검색 (개 이상의 문자를 비 X/Y/Z, 널 (null)) : 잘못된 입력을 잡는

"(|[\w\s]{4,}|[\w]{0,2}[^xyz][\w]{0,2})" 

몇 가지 예 :

$ grep -P '"(|[\w\s]{4,}|[\w]{0,2}[^xyz][\w]{0,2})"' user_input.txt 
"xya", "yyy", "zzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"xxxx", "yyy", "zzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"xxx", "yag", "zzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"xxx", "yyy", "zzo", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"(", "yxy", "yzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"", "yxy", "yzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 

일치하지 않는 것을 보는 예 (좋은 입력) :

$ grep -vP '"(|[\w\s]{4,}|[\w]{0,2}[^xyz][\w]{0,2})"' user_input.txt 
"xxx", "yyy", "zzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
"x", "yxy", "yzz", 'x', new ItemStack(Item.stick, 1, 0) , 'y', new ItemStack(Item.stick, 1, 0) , 'z', new ItemStack(Block.stone, 1, 0) 
관련 문제