1
abc([^\r\n]*) // 0 or more
abc([^\r\n]+)? // 1 or more, but it's optional
자바. 그들은 나에게 똑같이 보입니다.이 두 정규식의 차이는 무엇입니까?
abc([^\r\n]*) // 0 or more
abc([^\r\n]+)? // 1 or more, but it's optional
자바. 그들은 나에게 똑같이 보입니다.이 두 정규식의 차이는 무엇입니까?
둘 사이에 약간의 차이가 있습니다. 다음 code
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Example
{
public static void main (String[] args)
{
String text = "abc";
Pattern p1 = Pattern.compile("abc([^\\r\\n]*)");
Matcher m1 = p1.matcher(text);
if (m1.find()) {
System.out.println("MatchCount: " + m1.groupCount());
System.out.println("Group 1: " + m1.group(1));
} else {
System.out.println("No match.");
}
Pattern p2 = Pattern.compile("abc([^\\r\\n]+)?");
Matcher m2 = p2.matcher(text);
if (m2.find()) {
System.out.println("MatchCount: " + m2.groupCount());
System.out.println("Group 1: " + m2.group(1));
} else {
System.out.println("No match.");
}
}
}
는 출력을 제공 :
번째의 그룹이 비어있어 일치하지 않는 상태에서 제 정규식 빈 콘텐츠 캡처 그룹을 생성 따라서 문자열abc
경우
MatchCount: 1
Group 1:
MatchCount: 1
Group 1: null
. 비록 내가 자바에 익숙하지 않더라도, 나는 당신이 그들을 조금 다르게 다루어야 할 것이라고 생각할 것이다.
(!) 참고 :이 큰 차이를 만들 것입니다 곳
자바 조건 매칭을 지원 (PCRE는 달리, .NET, 좀 더 부스트와)과 조건 (부스트와는 달리) 대체하지 않습니다. 오, 델파이는 issues with optional named capturing groups입니다.
그들은 나에게도 똑같이 보입니다. –
'abc'의 경우 첫 번째는 첫 번째 캡처 그룹에 빈 문자열을 저장하고 두 번째 그룹은이 그룹을 저장하지 않지만 그룹에 액세스하려고 할 때 어떤 일이 발생하는지 Java에 익숙하지 않습니다. 1. 조건 매칭 (PCRE, Boost, .net 등) 또는 대체 (Boost)가 지원되는 다른 regex 맛은이 차이가 큰 점에 유의하십시오. 오와 델파이는 이름이 일치하지 않는 캡처 그룹에 액세스하는 데 문제가 있습니다. –
와우. 나는 그저 그것을 시험해야만했고 나는 틀린 대답을 게시했다고 생각합니다. https://regex101.com/r/H6nkxD/1는 다른 파서가 그룹'''(...)에 대해 실제로 다르게 행동한다는 것을 보여줍니다.'' – Art