정규식 검색 방법을 연습하고 있으므로 SQL 삽입 문에서 테이블 이름을 추출하려고합니다. 나는 (?<=INSERT INTO)\w+(?= (\(|VALUES).+)
정규식을 가지고 있고 문자열 INSERT INTO tests VALUES (regex, test)
에서 테스트 할 것이다. 정규식이 꼼꼼하게 수행되지 않았다는 것을 알고 있지만, 입력 한 부분 문자열의 tests
과 일치 할 것으로 기대합니다.Regex : String.split 및 Pattern.matches가 서로 일치하지 않습니다.
자바의 정규식 엔진을 사용하고 있는데 String.split
을 정규식에 넣었을 때와 내가 Pattern.matches
을 정규식으로 사용할 때의 결과를 인쇄하고 있습니다. 나는 다음과 같은, 겉으로-모순 그냥 기록에이를 얻기 위해 지금
regex> (?<=INSERT INTO)\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
[INSERT INTO , VALUES (regex, test)]
regex> (?<=INSERT INTO)\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
false
를 두 번째는
Pattern.matches(regex, searchString)
에서 온 반면, 첫 번째 결과를 생성 한 코드가
Arrays.toString(searchString.split(regex))
되는 결과를 얻을 수
split
은 일치하는 문자열을 인수로 나눕니 까? 즉, 정규 표현식이 tests
과 일치하므로 결과는 [INSERT INTO , VALUES (regex, test)]
입니다. 그럼, 왜 Pattern.matches
은 false를 반환 했습니까? 내가 놓친 것 없니?
'Pattern.matches'는 전체 문자열을 검색하는 데 사용되지 않습니까? 귀하의 경우 lookarounds 정말 '일치',하지만 테스트되지 않습니다. –