myregexp.com은 약간의 테스트를하는 것이 좋습니다.
공식 Java Regex Tutorial 공식적으로 알아두면 좋지만 대부분 알아야 할 사항이 포함되어 있습니다.
Pattern 설명서에는 위 튜토리얼에서 누락 된 공상 미리 정의 된 문자 클래스도 포함되어 있습니다.
당신이 준 예제에서 규칙적인 사항을 지정하지 않았습니다. 정규 표현식은 입력을 검증하는 규칙이있는 경우에만 의미가 있습니다.
정확히 "blocka#123#456"
일 경우 "blocka#123#456"
또는 "^blocka#123#456$"
은 정규식으로 사용됩니다. 내용이 ^
과 $
사이 인 것은 정규식 내부가 입력의 시작에서 끝까지 이어져야 함을 의미합니다. 때로는 필요하고 일반적으로 정규식 주위에 두는 것이 좋습니다.
blocka
동적이면은 적어도 하나의 길이 z
통해 소문자 a
임의의 순서와 일치하도록 [a-z]+
로 대체.block[a-z]
은 blocka
, blockb
등과 일치합니다. 및 [a-z]{6}
은 정확히 6 자의 모든 시퀀스와 일치합니다. [a-zA-Z]
에는 대문자가 포함되고 \p{L}
은 유니 코드 포함 글자 (예 : Blüc本
)와 일치합니다.
#
은 #
과 일치합니다. 특수 정규식 의미가없는 문자 (\^$ . | ? * + () [ ] { }
)와 같은 문자가 일치합니다. [^#]
은 #
을 제외한 모든 문자와 일치합니다. 숫자에 관한
: [0-9]+
또는 \d+
여러 번호에 대한 일반적인 패턴, [0-9]{1,4}
는 007
, 5
, 9999
처럼 1-4 숫자에서 구성된 아무것도 일치합니다. 예를 들어, (?:0|[1-9][0-9]{0,3})
은 0
과 9999
사이의 숫자와 일치하며 앞에 오는 0을 허용하지 않습니다. (?:STUFF)
은 (는) Matcher#group(1..?)
을 통해 추출 할 수있는 그룹에 영향을주지 않는 비 캡처 그룹입니다. |
을 사용한 논리적 그룹화에 유용합니다. (?:0|[1-9][0-9]{0,3})
의 의미는 단일 0
OR (1x 1
-9
다음에 0-3x0
-9
)이 올 수 있습니다.
은 너무 일반적이어서 사전 정의가 있습니다. \d
(자릿수)입니다. \
을 탈출해야하므로 정규 표현식 String
안에 \\d
이 있습니다.
그래서 옵션 중 일부는 blocka
에 의해 분리 된 숫자 적어도 하나 개의 그룹에 의해 다음과 일치 "hello #world!1# -12.f #本#foo#bar"
"^blocka(#\\d+)+$"
처럼 #
에 의해 분리 된 모든 항목과 일치 절대적으로 모든 것을
"^[^#]+(?:#[^#]+)+$"
일치
".*"
있습니다 #
예. 단지 바로 해당 문자열과 일치하는 #
마지막 번호 400-999
"^blocka#123#456$"
다음 399, - 그것은 숫자 0 다음에 blocka#
을 발견 한 경우에만 일치합니다 blocka#1#12#0007#949432149#3
"^blocka#(?:[0-9]|[1-9][0-9]|[1-3][0-9]{2})#[4-9][0-9]{2}$"
.
모두 당신이 준 예제와 일치하는 정규 표현식입니다.
는하지만 아마
public void Store_QR(String qr){
if(qr.matches("^blocka#\\d+#\\d+$")) {
CurrentLocation = qr;
}
else // Break the operation
}
또는
BlockName # start_X # start_Y 어떤 블록 이름
private static final Pattern QR_PATTERN = Pattern.compile("^blocka#(\\d+)#(\\d+)$");
public void Store_QR(String qr){
Matcher matcher = QR_PATTERN.matcher(qr);
if(matcher.matches()) {
int number1 = Integer.valueOf(matcher.group(1));
int number2 = Integer.valueOf(matcher.group(2));
CurrentLocation = qr;
}
else // Break the operation
}
만큼 간단합니다 ..문자열 "블록"로 시작하고 난 그에게 좋은 정규식,
"block"
을 시작으로
"^block\\w+#\\d+#\\d+$"
것 같아요 두 개의 정수
다음 다음 a
의 조합 - z
, A
- Z
, 0
-9
및 _
(thats the \w
) 다음에 #
, 숫자, #
, 숫자가옵니다. 는 전혀 이름이 없기 때문에 block_#0#0
, blockZ#9#9
, block_a_Unicorn666#0000#1234
있지만 block#1#2
을 일치합니다 때문에 문자 대신 숫자의 blockName#123#abc
일치하지 않습니다. 이름 부분 (\\w+
)가 너무 진보적 인 경우도 있기 때문에 대문자 B. 의 Block_a#123#456
일치하지 않을까요 (___
이 _123
법적 이름이 될 것입니다) 예를 들어, 사용 "^block_?[a-zA-Z]+#\\d+#\\d+$"
, 번호와 이름을 허용하지 않는 것은 단일 선택 사항 인 _
으로만 구분할 수 있으며 그 후에 문자가 있어야합니다. _a
, a
, _ABc
이 허용되지만, _
, _a_b
, _a9
이 아님. 이름에 숫자를 허용하려면 [a-zA-Z0-9]
문자 클래스를 사용하십시오.
QR 코드의 정확한 패턴은 무엇입니까? 더 많은 예제를 만들 수 있습니까? –
구체적인 내용을 구체적으로 설명해주십시오. E.G. #가 무엇인지, 리터럴 문자 #에 해당하는지, 리터럴 문자열이 "blocka"인지 또는 6 문자 길이의 텍스트인지를 나타내는 것입니다. 이 질문에 답하면 정규 표현식 자체를 설명 할 수 있습니다. 나는 당신이이 질문에 대답하면 자신에게 대답 할 수 있고 정규 표현식을 배워서 자신감을 가질 수 있다고 확신합니다. – hsanders
문자열 패턴이 BlockName # start_X # end_X – Ruby