깊이 있 게 정규 표현 식 을 자바 에서 사용 합 니 다.
•정규 표현 식 은 일반적으로 문자열 일치,문자열 찾기 와 문자열 교체 에 사 용 됩 니 다.그 역할 을 얕 보지 마 십시오.작업 학습 에서 정규 표현 식 처리 문자열 을 유연 하 게 활용 하면 효율 을 크게 높 일 수 있 습 니 다.프로 그래 밍 의 즐거움 은 이렇게 간단 합 니 다.
•일치 하 는 규칙 을 한꺼번에 제시 하 는 것 은 두 려 울 수 있 습 니 다.다음은 정규 표현 식 의 사용 을 쉽게 설명 하 겠 습 니 다.
정규 표현 식 일치
•선행 코드
public class Demo1 {
public static void main(String[] args) {
// abc "...", "."
//"..."
System.out.println("abc".matches("..."));
System.out.println("abcd".matches("..."));
}
}
//
true
false
•String 클래스 에matches(String regex)
방법 이 있 습 니 다.반환 값 은 불 형식 입 니 다.이 문자열 이 주어진 정규 표현 식 과 일치 하 는 지 알려 줍 니 다.•이 예 에서 우리 가 제시 한 정규 표현 식 은.......................................................................................
자바 에서 정규 표현 식 에 대한 지원(다양한 언어 에 해당 하 는 구현)
•자바 util.regex 패키지 아래 정규 표현 식 에 사용 되 는 두 가지 종류 가 있 습 니 다.하 나 는 Matcher 류 이 고 다른 Pattern 입 니 다.자바 공식 문서 에서 이 두 가지 유형 에 대한 전형 적 인 용법 을 보 여 줍 니 다.코드 는 다음 과 같 습 니 다.
public class Demo1 {
public static void main(String[] args) {
// abc "...", "."
//"..."
System.out.println("abc".matches("..."));
System.out.println("abcd".matches("..."));
}
}
//
true
false
•정규 표현 식 뒤의 원 리 를 깊이 연구 하려 면 컴 파일 원리 에서 자동 동기 등 지식 과 관련 되 고 설명 을 하지 않 습 니 다.통속 적 이 고 이해 하기 쉬 우 므 로 이미지 있 는 언어 로 설명 합 니 다.•Pattern 은 하나의 패턴 으로 이해 할 수 있 습 니 다.문자열 은 특정한 패턴 과 일치 해 야 합 니 다.예 를 들 어 Demo 2 에서 우리 가 정의 하 는 모델 은 길이 가 3 인 문자열 입 니 다.그 중에서 모든 문 자 는 a~z 중의 하나 여야 합 니 다.
•Pattern 대상 을 만 들 때 사용 하 는 것 은 Pattern 류 의 copile 방법 입 니 다.즉,우리 가 들 어 온 정규 표현 식 을 컴 파일 한 후에 모델 대상 을 얻 을 수 있 습 니 다.이 컴 파일 된 모델 대상 은 정규 표현 식 의 사용 효율 을 크게 향상 시 키 고 상수 로 서 여러 스 레 드 를 안전하게 병행 할 수 있 습 니 다.
•Matcher 는 패턴 이 특정한 문자열 과 일치 한 후에 발생 하 는 결과 로 이해 할 수 있 습 니 다.문자열 이 특정한 패턴 과 일치 하면 여러 가지 결과 가 발생 할 수 있 습 니 다.이것 은 뒤의 예 에서 설명 할 것 입 니 다.
•마지막 으로 m.matches()를 호출 할 때 전체 문자열 이 패턴 과 일치 하 는 결 과 를 되 돌려 줍 니 다.
•위의 세 줄 코드 는 한 줄 코드 로 간략화 할 수 있 습 니 다.
System.out.println("abc".matches("[a-z]{3}"));
•그러나 정규 표현 식 이 반복 적 으로 일치 해 야 한다 면 쓰기 효율 이 낮 습 니 다.초보 적 인식.+*?
•소개 하기 전에 먼저 설명 해 야 할 것 은 정규 표현 식 의 구체 적 인 의 미 는 강하 게 외 울 필요 가 없다 는 것 이다.각 기호의 의 미 는 자바 공식 문서 의 Pattern 류 설명 이나 인터넷 에서 상세 한 정 의 를 내 렸 다.당연히 익 힐 수 있 으 면 더욱 좋다.
public class Demo3 {
/**
* ,
* @param o
*/
private static void p(Object o){
System.out.println(o);
}
/**
* . Any character (may or may not match line terminators),
* X? X, once or not at all
* X* X, zero or more times
* X+ X, one or more times
* X{n} X, exactly n times x n
* X{n,} X, at least n times x n
* X{n,m} X, at least n but not more than m times n~m
* @param args
*/
public static void main(String[] args) {
p("a".matches("."));
p("aa".matches("aa"));
p("aaaa".matches("a*"));
p("aaaa".matches("a+"));
p("".matches("a*"));
p("a".matches("a?"));
// \d A digit: [0-9], , java "\" \ , \\d
p("2345".matches("\\d{2,5}"));
// \\. "."
p("192.168.0.123".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
// [0-2] 0~2
p("192".matches("[0-2][0-9][0-9]"));
}
}
//
// true
범위.•[]한 글자 의 범 위 를 설명 하 는 데 사용 되 는 예 입 니 다.
public class Demo4 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
//[abc] abc
p("a".matches("[abc]"));
//[^abc] abc
p("1".matches("[^abc]"));
//a~z A~Z ,
p("A".matches("[a-zA-Z]"));
p("A".matches("[a-z|A-Z]"));
p("A".matches("[a-z[A-Z]]"));
//[A-Z&&[REQ]] A~Z REQ
p("R".matches("[A-Z&&[REQ]]"));
}
}
//
모두 true인식\s\w\d-숫자 와 자모의 정규 표현 을 소개 합 니 다.이것 은 프로 그래 밍 에서 가장 많이 사용 하 는 문자 입 니 다.
에 대하 여
•가장 이해 하기 어 려 운\를 소개 합 니 다.자바 의 문자열 에 특수 문 자 를 사용 하려 면 앞 에\를 붙 여 전 의 를 해 야 합 니 다.
•예 를 들 어 이 문자열 을 고려 해 보 세 요."선생님 께 서 큰 소리 로 말씀 하 셨 습 니 다."얘 들 아,빨리 숙제 내!"만약 에 우리 가 전의 문자 가 없다 면 시작 하 는 작은 따옴표 의 끝 은'여기,하지만 우리 문자열 에 작은 따옴표 가 필요 하기 때문에 전의 문 자 를 사용 해 야 합 니 다.
•전의 문 자 를 사용 한 문자열 은"선생님 께 서 큰 소리 로 말씀 하 셨 습 니 다."학생 여러분,빨리 숙제 를 내세 요!\",이렇게 해야만 우리 의 원 의 를 정확하게 식별 할 수 있다.
•마찬가지 로 우리 가 문자열 에\를 사용 하려 면 앞 에\를 추가 해 야 하기 때문에 문자열 에"\\"라 고 표시 합 니 다.
•어떻게 정규 표현 식 에 일치 하 는 것 을 표시 합 니까?정 답 은"\\\\"입 니 다.
•우 리 는 나 누 어 생각 합 니 다:정규 식 에 서 는\\똑 같이 전의 가 필요 하기 때문에 앞의\\는 정규 표현 식 의 전의 문 자 를 표시 합 니 다\,뒤의\\는 정규 표현 식 에서\자 체 를 표시 합 니 다.정규 표현 식 에 서 는\를 표시 합 니 다.
•약간 꼬 인 느낌 이 들 면 아래 코드 를 보 세 요.
public class Demo5 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
/**
* \d A digit: [0-9]
* \D A non-digit: [^0-9]
* \s A whitespace character: [ \t
\x0B\f\r]
* \S A non-whitespace character: [^\s]
* \w A word character: [a-zA-Z_0-9]
* \W A non-word character: [^\w]
*/
// \\s{4} 4
p("
\r\t".matches("\\s{4}"));
// \\S
p("a".matches("\\S"));
// \\w{3}
p("a_8".matches("\\w{3}"));
p("abc888&^%".matches("[a-z]{1,3}\\d+[%^&*]+"));
// \
p("\\".matches("\\\\"));
}
}
//
모두 true경계 처리
•^괄호 안에 반대 의 미 를 표시 합 니 다[^].괄호 안에 없 으 면 문자열 의 시작 을 표시 합 니 다.
public class Demo6 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
/**
* ^ The beginning of a line
* $ The end of a line
* \b A word boundary , ,
*/
p("hello sir".matches("^h.*"));
p("hello sir".matches(".*r$"));
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
}
}
연습:공백 줄 과 이메일 주소 일치•글 한 편 을 받 으 면 몇 개의 공백 줄 이 있 는 지 어떻게 판단 합 니까?정규 표현 식 으로 편리 하 게 일치 할 수 있 습 니 다.빈 줄 에 빈 칸,탭 문자 등 이 포 함 될 수 있 습 니 다.
p(" ".matches("^[\\s&&[^]]*\$"));
•설명:^[\\\s&&[^]]*빈 칸 기호 이지 만 줄 바 꿈 문자 가 아 닙 니 다.\$마지막 으로 줄 바 꿈 문자 로 끝 납 니 다.
•다음은 일치 하 는 메 일 입 니 다.
p(" [email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w ]+"));
•설명:[\\\w[.-]+하나 이상 의 숫자 자모 로 밑줄 을 긋 거나-구성,@다음은@기호,그 다음 에 똑 같이[\\w[.-]+,그 다음 에\\\.일치 합 니 다.마지막 으로 똑 같이[\\w]+입 니 다.
Matcher 클래스 의 matches(),find(),lookingAt()
•matches()방법 은 전체 문자열 을 템 플 릿 과 일치 시 킵 니 다.
•find()는 현재 위치 부터 일치 합 니 다.문자열 을 입력 한 후 find()를 먼저 진행 하면 현재 위 치 는 문자열 의 시작 입 니 다.현재 위치 에 대한 구체 적 인 분석 은 아래 코드 예제 를 볼 수 있 습 니 다.
•lookingAt()방법 은 문자열 의 시작 부분 에서 일치 합 니 다.
public class Demo8 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = pattern.matcher(s);
// matches(), .
p(m.matches());
// false, 3~5 -
// find(), reset()
m.reset();
p(m.find());//true 123
p(m.find());//true 34345
p(m.find());//true 234
p(m.find());//false 00
// matches() reset(),
m.reset();//
p(m.matches());//false , -
p(m.find());// true 34345
p(m.find());// true 234
p(m.find());// false 00
p(m.find());// false ,
// lookingAt(),
p(m.lookingAt());//true 123,
}
}
Matcher 클래스 의 start()와 end()•한 번 일치 하 는 데 성공 하면 start()는 시작 과 일치 하 는 위 치 를 되 돌려 주 는 데 사 용 됩 니 다.end()는 끝 문자 와 일치 하 는 다음 위 치 를 되 돌려 주 는 데 사 용 됩 니 다.
public class Demo9 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = pattern.matcher(s);
p(m.find());//true 123
p("start: " + m.start() + " - end:" + m.end());
p(m.find());//true 34345
p("start: " + m.start() + " - end:" + m.end());
p(m.find());//true 234
p("start: " + m.start() + " - end:" + m.end());
p(m.find());//false 00
try {
p("start: " + m.start() + " - end:" + m.end());
}catch (Exception e){
System.out.println(" ...");
}
p(m.lookingAt());
p("start: " + m.start() + " - end:" + m.end());
}
}
//
true
start: 0 - end:3
true
start: 4 - end:9
true
start: 10 - end:13
false
...
true
start: 0 - end:3
대체 문자열•문자열 을 바 꾸 려 면 먼저 바 뀐 문자열 을 찾 아야 합 니 다.Matcher 클래스 의 방법 group()을 새로 소개 합 니 다.일치 하 는 문자열 을 되 돌려 줍 니 다.
•다음 예 를 들 어 문자열 의 자 바 를 대문자 로 변환 합 니 다.
public class Demo10 {
private static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) {
Pattern p = Pattern.compile("java");
Matcher m = p.matcher("java Java JAVA JAva I love Java and you");
p(m.replaceAll("JAVA"));//replaceAll()
}
}
//
JAVA Java JAVA JAva I love Java and you
업그레이드:대소 문자 구분 없 이 문자열 찾기 및 바 꾸 기
• ,
public static void main(String[] args) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//
Matcher m = p.matcher("java Java JAVA JAva I love Java and you");
p(m.replaceAll("JAVA"));
}
//
JAVA JAVA JAVA JAVA I love JAVA and you
재 업그레이드:대소 문 자 를 구분 하지 않 고 찾 은 지정 한 문자열 을 바 꿉 니 다.•여기 서 찾 은 기수 문자열 을 대문자 로 바 꾸 고,짝수 문자열 을 소문 자로 바 꾸 는 것 을 보 여 줍 니 다.
•Matcher 클래스 의 강력 한 방법 인 append Replacement(StringBuffer sb,String replacement)을 도입 합 니 다.
StringBuffer 에서 문자열 연결 을 진행 합 니 다.
public static void main(String[] args) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVA JAva I love Java and you ?");
StringBuffer sb = new StringBuffer();
int index = 1;
while(m.find()){
//m.appendReplacement(sb, (index++ & 1) == 0 ? "java" : "JAVA");
if((index & 1) == 0){//
m.appendReplacement(sb, "java");
}else{
m.appendReplacement(sb, "JAVA");
}
index++;
}
m.appendTail(sb);//
p(sb);
}
//
JAVA java JAVA java I love JAVA and you ?
패 킷•먼저 한 문제 에서 도입 하여 아래 코드 를 보 세 요.
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d{3,5}[a-z]{2}");
String s = "123aa-5423zx-642oi-00";
Matcher m = p.matcher(s);
while(m.find()){
p(m.group());
}
}
//
123aa
5423zx
642oi
•정규 표현 식"\\d{3,5}[a-z]{2}"은 3~5 개의 숫자 가 두 자 모 를 따라 간 다음 일치 하 는 문자열 을 출력 합 니 다.•일치 하 는 문자열 의 숫자 를 인쇄 하려 면 어떻게 조작 합 니까?
•우선 일치 하 는 문자열 을 다시 일치 시 킬 생각 을 할 수 있 습 니 다.그러나 너무 번 거 롭 습 니 다.그룹 체 제 는 정규 표현 식 에서 그룹 을 나 누 는 데 도움 을 줄 수 있 습 니 다.
•()로 그룹 을 나 누 도록 규정 하고 있 습 니 다.여기 서 알파벳 과 숫자 를 각각 한 그룹 으로 나 눕 니 다."\\d{3,5})([a-z]{2}"
•그리고 m.group(int group)방법 을 호출 할 때 그룹 번 호 를 입력 하면 됩 니 다.
•그룹 번 호 는 0 부터 시작 합 니 다.0 조 는 전체 정규 표현 식 을 대표 합 니 다.0 이후 정규 표현 식 에서 왼쪽 에서 오른쪽 까지 왼쪽 괄호 마다 한 그룹 에 대응 합 니 다.이 표현 식 에서 첫 번 째 그룹 은 숫자 이 고 두 번 째 그룹 은 알파벳 입 니 다.
public static void main(String[] args) {
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");// 3~5
String s = "123aa-5423zx-642oi-00";
Matcher m = p.matcher(s);
while(m.find()){
p(m.group(1));
}
}
//
123
5423
642
실전 1:웹 페이지 의 이메일 주소 잡기(파충류)•우리 가 가지 고 있 는 양질 의 자원 이 있다 고 가정 하여 네티즌 에 게 공유 하려 고 합 니 다.그래서 카페 에 메 일 을 남 겨 자원 을 보 내 는 댓 글 을 올 렸 습 니 다.네티즌 들 의 열정 이 높 아 100 개 에 가 까 운 메 일 을 남 겼 을 줄 은 몰 랐 습 니 다.그러나 하나씩 복사 해서 보 내 는 것 은 너무 피곤 합 니 다.우 리 는 절차 로 실현 하 는 것 을 고려 합 니 다.
•메 일 을 보 내 는 부분 을 펼 치지 않 고 배 운 정규 표현 식 을 사용 하여 웹 페이지 에서 모든 메 일 주 소 를 캡 처 합 니 다.
•먼저 게시 물의 html 코드 를 가 져 와 아무 거나 찾 았 습 니 다.점프 를 누 르 고 브 라 우 저 에서 오른쪽 단 추 를 누 르 면 html 파일 을 저장 합 니 다.
•다음 코드 보기:
public class Demo12 {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C:\\emailTest.html"));
String line = "";
while((line = br.readLine()) != null){//
parse(line);// email
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(br != null){
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void parse(String line){
Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());
}
}
}
//
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
...
실전 2:코드 통계 애플 릿•마지막 실전 사례:한 항목 에 모두 몇 줄 의 코드 가 있 는 지,몇 줄 의 주석,몇 개의 빈 줄 이 있 는 지 통계 해 보 세 요.자신 이 했 던 항목 을 통계 해 보 세 요.자신 도 모 르 는 사이 에 수천 줄 의 코드 를 쓴 사람 이라는 것 을 알 게 되 었 습 니 다.
•github 에서 하나의 항목 을 골 랐 습 니 다.순수한 자바 가 쓴 작은 항목 입 니 다.통 계 를 쉽게 할 수 있 습 니 다.클릭 하여 뛰 기
•다음은 구체 적 인 코드 입 니 다.빈 줄 을 판단 하 는 데 정규 표현 식 을 사용 한 것 을 제외 하고 코드 줄 과 주석 줄 을 판단 하 는 데 String 류 api 를 사 용 했 습 니 다.
public class Demo13 {
private static long codeLines = 0;
private static long commentLines = 0;
private static long whiteLines = 0;
private static String filePath = "C:\\TankOnline";
public static void main(String[] args) {
process(filePath);
System.out.println("codeLines : " + codeLines);
System.out.println("commentLines : " + commentLines);
System.out.println("whiteLines : " + whiteLines);
}
/**
*
* @param pathStr
*/
public static void process(String pathStr){
File file = new File(pathStr);
if(file.isDirectory()){//
File[] fileList = file.listFiles();
for(File f : fileList){
String fPath = f.getAbsolutePath();
process(fPath);
}
}else if(file.isFile()){// .java
if(file.getName().matches(".*\\.java$")){
parse(file);
}
}
}
private static void parse(File file) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while((line = br.readLine()) != null){
line = line.trim();//
if(line.matches("^[\\s&&[^\
]]*$")){//
, br.readLine()
whiteLines++;
}else if(line.startsWith("/*") || line.startsWith("*") || line.endsWith("*/")){
commentLines++;
}else if(line.startsWith("//") || line.contains("//")){
commentLines++;
}else{
if(line.startsWith("import") || line.startsWith("package")){//
continue;
}
codeLines++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != br){
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
//
codeLines : 1139
commentLines : 124
whiteLines : 172
탐욕 모드 와 비 탐욕 모드•두 가지 실전 을 거 친 후에 여러분 이 정규 표현 식 의 기본 적 인 사용 을 익 혔 다 고 믿 습 니 다.다음은 탐욕 모델 과 비 탐욕 모델 을 소개 합 니 다.공식 api 를 보면 Pattern 류 에 다음 과 같은 정의 가 있 음 을 알 수 있 습 니 다.
Greedy quantifiers 탐욕 모드
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
Reluctant quantifiers 비 탐욕 모드(억지로,내 키 지 않 는)
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times
Possessive quantifiers 독점 모드
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times
•이 세 가지 모델 은 똑 같은 뜻 을 표현 합 니 다.앞의 설명 에서 우리 가 모두 사용 하 는 것 은 탐욕 모델 입 니 다.그러면 다른 두 가지 모델 의 쓰기 방법 은 어떤 차이 가 있 습 니까?아래 의 코드 예 시 를 통 해 설명 하 겠 습 니 다.
public static void main(String[] args) {
Pattern p = Pattern.compile(".{3,10}[0-9]");
String s = "aaaa5bbbb6";//10
Matcher m = p.matcher(s);
if(m.find()){
System.out.println(m.start() + " - " + m.end());
}else {
System.out.println("not match!");
}
}
//
0 - 10
•정규 표현 식 은 3~10 개의 문자 에 숫자 를 추가 한 다 는 뜻 입 니 다.탐욕 모드 에서 일치 할 때 시스템 은 10 개의 문 자 를 먼저 삼 킵 니 다.이때 마지막 숫자 를 검사 할 때 문자 가 없 는 것 을 발견 하고 한 문 자 를 뱉 습 니 다.다시 숫자 와 일치 하여 0-10 을 얻 습 니 다.•다음은 비 탐욕 모드 프 리 젠 테 이 션(억지로,내 키 지 않 는)
public static void main(String[] args) {
Pattern p = Pattern.compile(".{3,10}?[0-9]");// ?
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);
if(m.find()){
System.out.println(m.start() + " - " + m.end());
}else {
System.out.println("not match!");
}
}
//
0 - 5
•비 탐욕 모드 에서 먼저 3 개(최소 3 개)만 삼 킨 다음 에 뒤의 숫자 인지 아 닌 지 를 판단 합 니 다.결 과 는 아 닙 니 다.한 문 자 를 뒤로 삼 키 고 뒤의 숫자 여 부 를 계속 판단 합 니 다.결 과 는'출력 0-5'입 니 다.•마지막 으로 독점 모델 을 보 여 주 는 것 은 효율 을 추구 하 는 상황 에서 만 이렇게 하 는 것 이 적 습 니 다.
public static void main(String[] args) {
Pattern p = Pattern.compile(".{3,10}+[0-9]");// +
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);
if(m.find()){
System.out.println(m.start() + " - " + m.end());
}else {
System.out.println("not match!");
}
}
//
not match!
•독점 모드 는 10 자 를 한꺼번에 삼 키 고 그 다음 에 숫자 인지 아 닌 지 를 판단 합 니 다.일치 하 든 성공 하 든 계속 삼 키 거나 토 하지 않 습 니 다.총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 정규 표현 식 이 자바 에서 사용 되 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.