최근에 Java에서 정규 표현식의 오류라고 생각했던 코드를 만들었지 만 코드를 테스트 할 때 예상 한 오류가 발생하지 않습니다.이스케이프 처리되지 않은 "." 부정적인 그룹에서 사용될 때도 여전히 일치합니다.
내가 만든 표현은 다른 소스에서받은 문자열의 암호를 대체하기위한 것입니다. 내가 사용한 패턴은 "password : [^ \\ s.] *"의 줄을 따라 갔다. "password"라는 단어는 콜론, 스페이스, 스페이스 또는 완전 정지 (마침표). 그런 다음 인스턴스를 "password : XXXXXX"로 바꾸고 마스크 처리합니다.
명백한 오류는 내가 풀 스톱을 벗어나는 것을 잊어 버린 것입니다. 다른 말로하면 올바른 표현은 "password : [^ \\ s \\.] *"이어야합니다. 제가 코드를 완전히 벗어나지 않으면 코드가 여전히 작동합니다!
여기에 몇 가지 예제 코드는 다음과 같습니다
import java.util.regex.*;
public class SimpleRegexTest {
public static void main(String[] args) {
Pattern simplePattern = Pattern.compile("password: [^\\s.]*");
Matcher simpleMatcher = simplePattern.matcher("password: newpass. Enjoy.");
String maskedString = simpleMatcher.replaceAll("password: XXXXXX");
System.out.println(maskedString);
}
}
나는 다음과 같은 출력 얻을 위의 코드를 실행하면 :
password: XXXXXX. Enjoy.
이, 특별한 경우인가 또는 내가 완전히 뭔가를 놓친를?
(편집 : "마침표 탈출"로 변경)
마이클 Borgwardt : 내가 모호성 죄송합니다 "부정 그룹"에서 떨어져 무엇을하고 있었는지 설명하는 다른 용어 생각하지 못했습니다.
에비 에이터 :이 경우, 아니요, 공백은 암호에 포함되지 않습니다. 나는 규칙을 만들지 않았다 ;-). 이중 슬래시를 고정 :
다르 -
(/ 편집 :이 제대로 표시되도록 비 코드 텍스트에 슬래시를 두 배로 코드에서 ^이었다 추가가 아니라 텍스트) 그래서 자신의 탈출 문자가있는 것 같습니다.
당신의 질문은 약간 혼란 스럽습니다. 당신은 텍스트에 부정 그룹을 사용하고 있지 않습니다. 당신은 말하자면, 당신이 의미하는 것보다 "공간"을 피하는 것에 대해 이야기합니다. –
하나의 쿼리가 있습니다. 암호 문자로 공백을 둘 수 없습니까 ?? 왜 그것을 제외하고 있습니까? – vpram86
Kurley, 나는 당신이 Michael Borgwardt의 요점을 잃어 버렸다고 생각한다 : 당신은 코드에서 [^ \\ s.] *를 사용하지만 위의 텍스트에는^기호가없는 [\ s.] *를 사용한다. 텍스트의 오타라고 생각합니다. 많은 혼란을 불러 일으키므로 수정하십시오. – sundar