1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [세미나 : 정규 표현식을 사용한 패턴 매칭] 2 00:00:02,000 --> 00:00:04,000 [존 Mussman 하버드 대학교] 3 00:00:04,000 --> 00:00:07,220 [이것은 CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 좋아요. 물론, 모두 환영합니다. 이 CS50 2012입니다. 5 00:00:11,780 --> 00:00:16,610 내 이름은 존입니다, 나는 정규 표현식에 대해 오늘 이야기 할 것입니다. 6 00:00:16,610 --> 00:00:22,530 정규 표현식은 주로 도구이지만, 또한 때때로 사용 7 00:00:22,530 --> 00:00:28,650 코드에서 적극적으로 기본적으로 패턴과 문자열을 만들어보세요. 8 00:00:28,650 --> 00:00:33,800 그래서 여기 XKCD에서 웹 만화입니다. 9 00:00:34,440 --> 00:00:42,370 이 만화에서 범인이 살인 미스터리가 10 00:00:42,370 --> 00:00:47,860 휴가 누군가를 따라하고, 주인공해야만 11 00:00:47,860 --> 00:00:52,500 주소 확인 이메일 200메가바이트를 통해 검색 할 수 있습니다. 12 00:00:52,500 --> 00:00:56,090 그리고 그들은 정규 표현식을 아는 경우 사람을 포기하려고합니다 - 13 00:00:56,090 --> 00:01:00,550 아마도 슈퍼 히어로 - 급습 아래 몇 가지 코드를 작성 14 00:01:00,550 --> 00:01:02,970 과 살인 미스터리를 해결합니다. 15 00:01:02,970 --> 00:01:07,370 그래서 아마도 그건 당신이 어떻게 할 수있는 권한 뭔가 될 것입니다 16 00:01:07,370 --> 00:01:09,370 이 세미나 후. 17 00:01:09,370 --> 00:01:12,250 우리는 단지 언어 간결한 소개를 제공하려는 18 00:01:12,250 --> 00:01:16,770 그리고 당신에게 당신의 자신에 더 많은 자원 후에 갈 충분한 자금을 제공합니다. 19 00:01:17,680 --> 00:01:21,700 >> 따라서 정규 표현식은 다음과 같이 기본적보세요. 20 00:01:22,930 --> 00:01:25,550 이 루비 정규 표현식입니다. 21 00:01:25,550 --> 00:01:29,280 그것은 언어를 통해 정말 차이가 없습니다. 22 00:01:29,690 --> 00:01:37,630 우리는 루비 정규 표현식을 시작하고 표시하는 것만 슬래시에있다. 23 00:01:37,630 --> 00:01:42,880 이 이메일 주소 패턴을 찾기 위해 정규 표현식입니다. 24 00:01:42,880 --> 00:01:49,160 그래서 우리는 첫 번째 비트에 영숫자 문자를 찾습니다 참조하십시오. 25 00:01:50,500 --> 00:01:54,880 이메일 주소는 종종 알파벳 문자로 시작해야하기 때문이다. 26 00:01:55,460 --> 00:01:59,330 그리고 모든 특수 문자는 @ 기호 다음에. 27 00:01:59,330 --> 00:02:03,260 그리고 도메인 이름 같은 것. 28 00:02:03,260 --> 00:02:10,030 그리고 2 사이 4 자 그래서 그물.,. com을 찾아하고 있습니다. 29 00:02:10,850 --> 00:02:13,200 그래서이 정규 표현식의 또 다른 예입니다. 30 00:02:13,200 --> 00:02:17,270 따라서 정규 표현식은 텍스트에 재잘 거림을 찾기위한 프로토콜입니다. 31 00:02:17,270 --> 00:02:21,130 그들은 비교, 선택 및 교체를한다. 32 00:02:21,690 --> 00:02:27,970 디렉토리에 54로 끝나는 모든 전화 번호를 찾는 세 번째 예 그래서. 33 00:02:27,970 --> 00:02:34,360 그래서 CS50 디렉토리까지 데이비드 입술 전에 우리가 검색 할 수 34 00:02:34,360 --> 00:02:40,450 우리는 괄호를 패턴은 다음 3 개의 숫자는 괄호를 종료 35 00:02:40,450 --> 00:02:44,070 3 개 이상의 숫자, 대시, 2 개의 숫자, 그리고 54. 36 00:02:44,070 --> 00:02:48,310 그리고 그 우리가 검색 할 정규 표현식을 마련하는 방법 본질적 될 것입니다. 37 00:02:49,150 --> 00:02:52,960 >> 그래서 거기 - 우리는 CS50에 몇 가지를 수행 한처럼 조금있다 그 38 00:02:52,960 --> 00:02:59,740 그래서 정규 표현식, - 예를 들어 - dictionary.C 파일 39 00:02:59,740 --> 00:03:04,720 맞춤법 검사 문제 세트는 fscanf를 사용했을 수 있습니다 40 00:03:04,720 --> 00:03:07,930 사전에서 단어 읽을 수 있습니다. 41 00:03:07,930 --> 00:03:16,240 그리고 당신은 백분율 45 초 45 문자의 문자열을 찾고있다 볼 수 있습니다. 42 00:03:16,240 --> 00:03:20,020 그래서 기본적인 정규 표현식과 같은 약간이다. 43 00:03:21,150 --> 00:03:26,060 그리고 당신은 거기에 법안에 맞게 모든 45 문자를 사용할 수 있습니다 44 00:03:26,060 --> 00:03:28,080 그 업을 선택합니다. 45 00:03:28,080 --> 00:03:33,480 가장 최근의 웹 프로그래밍 문제와 두 번째 예제 46 00:03:33,480 --> 00:03:40,760 PHP의 배포판 코드에서 설정 우리가 실제로 간단한 정규 표현식이 있습니까. 47 00:03:40,760 --> 00:03:46,790 이 사람은 단지 웹 페이지가 전달됩니다 있는지 확인하기 위해 찾고 있습니다 48 00:03:46,790 --> 00:03:51,940 하나 로그인을 일치하거나 등록 로그 아웃. PHP를. 49 00:03:52,220 --> 00:03:57,910 그리고 그 다음 정규 표현식 매칭에 따라 true 또는 false를 반환. 50 00:03:59,400 --> 00:04:01,740 >> 그래서 때 정규 표현식을 사용합니까? 51 00:04:01,740 --> 00:04:04,820 왜 여기 오늘? 52 00:04:05,330 --> 00:04:08,480 뭔가가있을 때 그래서 당신은 정규 표현식을 사용하지 않으려면 53 00:04:08,480 --> 00:04:11,640 더 쉽게 당신을 위해 작업을 수행합니다. 54 00:04:11,640 --> 00:04:15,510 그래서 XML과 HTML은 꽤 까다로운 55 00:04:15,510 --> 00:04:18,480 우리는 조금의 볼과에 대해 정규 표현식을 쓸 수 있습니다. 56 00:04:19,110 --> 00:04:23,280 그래서 그 언어를위한 전용 파서가 있습니다. 57 00:04:24,170 --> 00:04:30,060 당신은 또한 자주 장단점 및 정확도 괜찮해야합니다. 58 00:04:30,060 --> 00:04:36,220 당신이 시도하는 경우 - 그래서 우리는 전자 메일 주소에 대한 정규식을 보았다 59 00:04:37,370 --> 00:04:42,590 하지만 당신은 특정 전자 메일 주소를 원하고 점차적으로 말 60 00:04:42,590 --> 00:04:48,570 보다 정확한되면서 정규 표현식은 복잡한 될 수 있습니다. 61 00:04:49,580 --> 00:04:52,260 그래서 하나의 트레이드 오프 될 것입니다. 62 00:04:52,260 --> 00:04:55,330 당신은 괜찮 정규 표현식으로하고 있는지 확인해야합니다. 63 00:04:55,330 --> 00:04:57,920 당신은 당신이 찾고있는 정확히 알고 있다면 그것은 더 많은 감각을 만들 수도 있습니다 64 00:04:57,920 --> 00:05:02,070 시간을두고 더 효과적인 파서를 작성 해주세요. 65 00:05:02,070 --> 00:05:06,980 그리고 마지막으로 규칙과 역사 문제가 있습니다 66 00:05:06,980 --> 00:05:08,940 표현과 언어. 67 00:05:08,940 --> 00:05:12,960 정규 표현식은 실제로 훨씬 더 강력한보다 68 00:05:12,960 --> 00:05:16,450 당 정규 표현식은 공식적인 의미에서 말한다. 69 00:05:17,130 --> 00:05:20,150 >> 그래서, 형식적인 이론에 너무 멀리 가고 싶지 않아 70 00:05:20,150 --> 00:05:24,000 그러나 대부분의 언어는 우리가 실제로의 코드는 일반 아니라는 것을. 71 00:05:24,000 --> 00:05:29,110 정규 표현식은 때로는 모두 안전한 것으로 간주되지 않습니다 이유 때문입니다. 72 00:05:29,670 --> 00:05:33,150 그래서 기본적으로 언어에 대한 촘스키 계층 구조가있다 73 00:05:33,150 --> 00:05:38,400 정규 표현식은 조합, 연결을 사용하여 구축된다 74 00:05:38,400 --> 00:05:41,810 그리고 우리는 몇 분 Kleene 별 작업을 볼 것이다. 75 00:05:43,130 --> 00:05:48,860 당신이 관심이 있다면 이론적으로 후드가 벌어 꽤 많이있다. 76 00:05:50,360 --> 00:05:55,880 >> 연혁 그래서 - 여기 컨텍스트 - 일반 세트가 등장했습니다 77 00:05:55,880 --> 00:05:59,580 1950 년대에, 그리고 우리는 간단한 편집기를했다 78 00:05:59,580 --> 00:06:03,300 정규 표현식을 통합 - 그냥 문자열을 검색. 79 00:06:03,570 --> 00:06:09,110 그렙 - 이는 명령 줄 도구는 - 최초의 중 하나 80 00:06:09,110 --> 00:06:14,160 1960 년대에 정규 표현식을 포함하는 매우 인기있는 도구를 제공합니다. 81 00:06:14,160 --> 00:06:20,560 80 년대, 펄이 내장 된 - 프로그래밍 언어입니다 82 00:06:20,560 --> 00:06:24,110 아주 눈에 띄게 정규 표현식을 포함합니다. 83 00:06:24,550 --> 00:06:30,130 그리고 최근에 우리는 펄 호환 정규 표현식을 가지고있다 84 00:06:30,130 --> 00:06:35,870 기본적으로 동일한 구문을 많이 사용하는 다른 언어로 프로토콜을 지원합니다. 85 00:06:36,630 --> 00:06:39,840 물론 가장 중요한 사건은 2008 년에 있었다 86 00:06:39,840 --> 00:06:43,040 여기서 첫 번째 국가 정규식 날이 있었다 87 00:06:43,040 --> 00:06:47,350 당신이하는을 축하하려는 경우 어떤 I는 6월 1일 생각합니다. 88 00:06:48,430 --> 00:06:50,840 >> 여기에 다시, 단지 조금 더 이론. 89 00:06:52,180 --> 00:06:55,320 따라서 정규 표현식을 구성하는 몇 가지 방법이 있습니다. 90 00:06:55,950 --> 00:07:02,050 한 가지 간단한 방법은 당신이하려고하는 식을 작성하는 것입니다 91 00:07:02,050 --> 00:07:07,500 해석 문자열에서 실행 - 기본적으로하는 미니 프로그램을 조금 구축 92 00:07:07,500 --> 00:07:11,870 문자열의 조각을 분석하고 볼 수 있습니다, "아,이 정규 표현식에 맞게하거나하지 않는 이유는 무엇입니까?" 93 00:07:12,250 --> 00:07:14,250 그리고 그 다음을 실행합니다. 94 00:07:14,250 --> 00:07:17,300 당신은 아주 작은 정규 표현식이있는 경우에는,이 아마 95 00:07:17,300 --> 00:07:19,380 그것을 할 수있는 가장 효율적인 방법입니다. 96 00:07:20,090 --> 00:07:25,420 그리고 당신 경우 - 다른 옵션을 재구성 유지하는 것입니다 97 00:07:25,420 --> 00:07:30,260 표현 당신은 가고, 그 시뮬레이션의 가능성 때문입니다. 98 00:07:30,440 --> 00:07:37,690 그리고 정규 표현식 알고리즘에서 이러한 초기 시도는 있었다 99 00:07:37,690 --> 00:07:44,330 비교적 간단하고 비교적 빠르다, 그러나 많은 유연성을 가지고 있지 않았다. 100 00:07:44,330 --> 00:07:47,500 그래서 몇 가지 우리가 보는가는 것을도 있어요 101 00:07:47,500 --> 00:07:52,860 오늘 우리는보다 복잡한 정규 표현식을 수행해야했다 102 00:07:52,860 --> 00:07:56,650 잠재적으로 훨씬 느린 구현, 명심 뭔가가되도록 103 00:07:57,510 --> 00:08:02,920 공격 다양한 정규 표현식 거부도 있습니다 104 00:08:02,920 --> 00:08:08,330 이러한 새로운 구현을위한 잠재력을 활용하는 105 00:08:08,330 --> 00:08:10,930 매우 복잡하게하는 정규 표현식. 106 00:08:11,570 --> 00:08:15,650 그리고 우리는 버퍼 오버 플로우 공격에서 보았던 것과 같은 의미에서, 107 00:08:15,650 --> 00:08:21,610 당신은 일이 재귀 루프를 만들어서 공격이 108 00:08:21,610 --> 00:08:24,400 메모리의 용량을 오버런. 109 00:08:24,780 --> 00:08:29,540 그리고 방법에 의해 Regexen는 정규 표현식의 공식 복수형 중 하나입니다 110 00:08:29,540 --> 00:08:32,890 앵글로 색슨의 소에 비유 있습니다. 111 00:08:33,500 --> 00:08:40,169 >> 좋아, 그래서 파이썬 라이브러리 사람 여기에 당신이 많은 맥이, 112 00:08:40,169 --> 00:08:43,860 그래서 당신은 실제로 화면에이 당겨 수 있습니다. 113 00:08:43,860 --> 00:08:47,480 정규 표현식은 파이썬에 내장되어 있습니다. 114 00:08:48,070 --> 00:08:53,020 그래서 파이썬은이 링크에서 맥과도 온라인에 사전로드되어 있습니다. 115 00:08:53,770 --> 00:08:57,350 당신이보고되는 경우에 일시 정지하고 파이썬을 확인하실 수 있습니다 116 00:08:58,080 --> 00:09:00,170 우리는 여기서 연주. 117 00:09:00,780 --> 00:09:06,420 당신은 당신의 컴퓨터에 파이썬을 입력 그렇다면 온라인 매뉴얼이있다 118 00:09:06,420 --> 00:09:10,500 당신은 버전이 단말기 등장 것을 볼 수 있습니다. 119 00:09:11,070 --> 00:09:17,720 그래서 나는 파이썬의 버전 2뿐만 아니라 컨닝 페이퍼에 대한 설명서 링크를 제공. 120 00:09:17,720 --> 00:09:23,100 거기에 파이썬의 버전 3이지만, 맥은 반드시하지 않습니다 121 00:09:23,100 --> 00:09:25,130 사전로드가 포함되어 있습니다. 122 00:09:25,130 --> 00:09:27,360 그래서 정말 차이가 없습니다. 123 00:09:27,360 --> 00:09:33,270 좋아, 그럼 파이썬에서 정규식을 사용하는 몇 가지 기본 사항. 124 00:09:34,080 --> 00:09:42,650 >> 그래서 나는 여기있는 매우 간단한 표현을 사용, 그래서 파이썬 가져 오기 다시 한 125 00:09:43,750 --> 00:09:47,070 다음에 re.search의 결과를했습니다. 126 00:09:47,070 --> 00:09:49,910 그리고 검색이 인수를 사용합니다. 127 00:09:49,910 --> 00:09:56,040 첫 번째는 정규 표현식이고, 두 번째는 텍스트입니다 128 00:09:56,040 --> 00:09:58,290 또는 분석 할 문자열입니다. 129 00:09:58,290 --> 00:10:01,210 그리고 나서 result.group을 인쇄했습니다. 130 00:10:01,580 --> 00:10:05,860 그래서이 오늘날 우리가 보게 될 2 기본 기능입니다 131 00:10:06,790 --> 00:10:10,170 정규 표현식에 대해 학습합니다. 132 00:10:10,170 --> 00:10:12,880 그래서 그냥이 정규 표현식은 여기에 분해 133 00:10:12,880 --> 00:10:21,770 H하고 \ w 다음은 M 있도록 \ w는 그냥 거기에있는 모든 알파벳 문자를 사용할 수 있습니다. 134 00:10:21,850 --> 00:10:26,820 그래서 여기에 우리는 또 다른 알파벳 문자 "H"를 찾고 그리고있다 135 00:10:26,820 --> 00:10:30,060 그리고 M은, 그래서 여기에 햄과 일치하는 것 136 00:10:30,060 --> 00:10:34,480 에서, "아브라함 링컨과 햄 샌드위치입니다." 137 00:10:35,040 --> 00:10:37,150 이것은 그룹의 결과입니다. 138 00:10:37,680 --> 00:10:43,130 우리가 할 수있는 또 다른 것은 파이썬에서 텍스트의 우리의 이전 문자열을 사용하는 것입니다. 139 00:10:43,130 --> 00:10:46,220 그래서 내가 가서 여기에 그를 끌어 같아요. 140 00:10:46,220 --> 00:10:49,210 파이썬 다시 가져 오기. 141 00:10:50,070 --> 00:10:54,000 그리고 같은 일을 수행하는 경우 - 우리가 텍스트라고하자 142 00:10:55,390 --> 00:11:00,800 "아브라함은"우리는 확대하자 - 거기 우리는 간다. 143 00:11:01,610 --> 00:11:06,430 텍스트는 "아브라함이 햄 먹는다."입니다 144 00:11:07,460 --> 00:11:15,260 좋아, 다음 =에 re.search를 결과. 145 00:11:16,260 --> 00:11:22,020 그리고 우리의 표현이 시간이 될 수 있습니다, 그리고 난 점 M을 할 것입니다. 146 00:11:22,020 --> 00:11:26,280 그래서 점은 숫자를 포함하는 새로운 라인이 아닌 모든 문자를 걸립니다 147 00:11:26,280 --> 00:11:28,650 백분율 기호, 그런 건. 148 00:11:28,650 --> 00:11:38,030 그리고 텍스트 - 붐 - 그리고 result.group - 그래. 149 00:11:38,030 --> 00:11:41,820 그래서 여기에 기본적인 기능을 구현하는 단지 방법이다. 150 00:11:42,300 --> 00:11:55,110 미친 텍스트 - - 우리가 텍스트 링이 있다면 다시 슬래시 많은 말을 포함 151 00:11:55,110 --> 00:12:01,180 및 내부 문자열 이스케이프 시퀀스처럼 보일 수 것들 152 00:12:01,180 --> 00:12:08,480 그때 우리는 아마 허용되어 있는지 확인하는 원시 텍스트 입력을 사용하고 싶습니다. 153 00:12:08,480 --> 00:12:14,120 그리고 그냥 그렇게 보인다. 154 00:12:14,120 --> 00:12:17,810 우리가 거​​기에 각각 찾고 있었다 그래서 만약 우리가 아무것도 찾을 수 없습니다. 155 00:12:19,070 --> 00:12:21,680 그러나 당신이 그것을 구현하는 방법입니다 직전의 문자열 156 00:12:21,680 --> 00:12:24,990 정규 표현식 당신은 문자 R을 넣어. 157 00:12:26,150 --> 00:12:30,260 >> 좋아, 그럼 우리가 계속하자. 158 00:12:30,260 --> 00:12:33,730 오른쪽 모두 - 그렇게 우리는 여기에 몇 가지 반복적 인 패턴을 살펴 보자. 159 00:12:34,750 --> 00:12:39,150 그래서 당신이하고 싶은 한 가지 일을 수생입니다 160 00:12:40,040 --> 00:12:42,480 당신은 텍스트를 검색하는 등. 161 00:12:42,480 --> 00:12:48,300 따라서 B의 숫자를 따라 수행 방법 - 당신의 ab *을 수행하십시오. 162 00:12:48,630 --> 00:12:51,620 그리고 다른 일련의 규칙도있다. 163 00:12:51,620 --> 00:12:54,380 그리고 당신이 최대를 모두 볼 수 있으며, 난 그냥 일부를 통해 실행됩니다 164 00:12:54,380 --> 00:12:57,630 가장 일반적으로 사람을 사용했다. 165 00:12:57,630 --> 00:13:03,920 그래서 AB +는 모든 N B의 0보다 큰옵니다. 166 00:13:04,510 --> 00:13:08,000 AB? 인 B의 0 또는 1로 따랐다. 167 00:13:09,190 --> 00:13:18,580 AB {N}는 B의 N 다음, 다음 등이다. 168 00:13:18,580 --> 00:13:22,820 당신은 중괄호 2 번호가 있다면 당신은 범위를 지정하는 169 00:13:23,300 --> 00:13:25,440 그 가능성이 일치 할 수 있습니다. 170 00:13:26,390 --> 00:13:30,420 그래서 우리는 분 몇 반복적 인 패턴을 더 볼 것이다. 171 00:13:31,960 --> 00:13:42,300 그래서 여기에 도구를 이러한 패턴 일치를 사용할 때 명심해야 할 2 가지. 172 00:13:42,300 --> 00:13:52,120 우리의 HM보고 싶지 그렇게 말씀, "에이브 러햄 링컨 햄 샌드위치를​​ 만든다." 173 00:13:52,120 --> 00:13:55,230 그래서 아브라함 에이브 러햄 링컨의 이름을 변경했습니다. 174 00:13:55,230 --> 00:14:00,290 그리고 지금 우리는이 검색 기능에 의해 반환되는 것을 찾고 있습니다 175 00:14:00,290 --> 00:14:03,270 그리고는이 경우에 햄을 반환합니다. 176 00:14:03,620 --> 00:14:08,080 그리고 검색 자연스럽게 가장 왼쪽 큐를 소요하기 때문 않습니다. 177 00:14:08,080 --> 00:14:12,130 그리고 당신은 달리 지정하지 않는 한 모든 정규 표현식은 그렇게 할 것입니다. 178 00:14:12,830 --> 00:14:18,880 우리 모두를 찾을하려는 경우 해당하는 기능이있다 - 모두를 찾을 수 있습니다. 179 00:14:18,880 --> 00:14:35,100 그래서 그냥 = re.findall ( 'h.m'텍스트)처럼 보이게 수있는 180 00:14:35,100 --> 00:14:44,540 다음 () all.group. 181 00:14:44,540 --> 00:14:51,040 모두 햄과 햄을 모두 생산하고 있으며, 각 햄이 경우 모두 아브라함의 문자열. 182 00:14:51,610 --> 00:14:55,110 그래서 또 다른 옵션입니다. 183 00:14:56,250 --> 00:15:06,940 >> 좋아요. 명심해야 할 또 다른 점은 정규 표현식은 직관적으로 가장 큰 걸릴 것입니다. 184 00:15:06,940 --> 00:15:09,520 우리는이 예를 살펴 보자. 185 00:15:10,200 --> 00:15:16,070 우리는 여기서 그 가장 왼쪽에 검색을했고, 그때 큰 검색을 시도 186 00:15:16,070 --> 00:15:18,800 클린의 별 (Kleene star) 연산자를 사용. 187 00:15:18,800 --> 00:15:24,180 그래서 들어, "아브라함 링컨, 햄 샌드위치를​​ 만들어"나는 단지 돌아왔다 188 00:15:24,180 --> 00:15:26,280 결과로 m. 189 00:15:26,280 --> 00:15:31,670 그 실수에 대한 이유는 나는의 번호를 촬영 한 수 있었다 190 00:15:31,670 --> 00:15:36,140 나는 H와 M 사이에서 갈 아무것도 지정하지 않았기 때문에 시간이다. 191 00:15:36,140 --> 00:15:42,010 M이 있던 유일한 예 - 그것은 m에 함께가 유일한 사례 192 00:15:42,010 --> 00:15:46,220 와 H의 임의의 수의 단지 문자열 M이었다. 193 00:15:46,490 --> 00:15:51,850 그럼 난 다시 그것을 시도, 나는 말했다, "그래, 우리는 여기에 실제 큰 그​​룹을 방문하세요." 194 00:15:51,850 --> 00:15:59,670 그리고 나는 H를했다. * m, 단지 H와 M 사이의 문자 수를 반환하도록. 195 00:16:00,280 --> 00:16:02,950 그리고 당신은 다만 밖으로 시작하고 좋아요,이, "아, 할 생각을하면 196 00:16:02,950 --> 00:16:11,560 저에게 햄을, "실제로 아브라함 링컨 H에서 모든 소요 197 00:16:11,560 --> 00:16:13,690 햄의 끝에 모든 방법. 198 00:16:14,040 --> 00:16:18,110 그것은 욕심, 그것은 시간을보고 -이 모든 다른 텍스트 - M, 199 00:16:18,110 --> 00:16:21,280 그리고 그것이 안으로 걸리는 것입니다 200 00:16:22,060 --> 00:16:27,480 이것은 특히 중대한 사안입니다 - 이것은 우리가 또한 할 수있는 기능입니다 201 00:16:27,480 --> 00:16:30,670 그것은 다른 함수를 사용하여 욕심을 위해 지정합니다. 202 00:16:31,480 --> 00:16:34,490 그러나 이것은 우리가 특히 명심해야 할 일이있다 203 00:16:34,490 --> 00:16:38,720 HTML 텍스트를 볼 때, 그 이유 중 하나입니다 204 00:16:38,720 --> 00:16:41,500 정규 표현식은 HTML에 대한 어렵습니다. 205 00:16:42,460 --> 00:16:46,310 때문에 중간에 HTML 열린 태그와 다음 물건을 많이 가지고있는 경우 206 00:16:46,310 --> 00:16:49,820 그리고 다른 HTML은 프로그램에서 훨씬 나중에 태그를 폐쇄 207 00:16:49,820 --> 00:16:55,420 당신은 아마도 실수로 귀하의 HTML 코드를 많이 먹었어요. 208 00:16:56,200 --> 00:17:01,840 >> 좋아요 - 그래서 더 많은 특수 문자, 많은 다른 언어처럼, 209 00:17:01,840 --> 00:17:04,780 우리는 슬래시를 사용하여 이스케이프. 210 00:17:04,780 --> 00:17:10,329 그래서 우리는 새로운 라인을 제외한 모든 문자를 지정하는 점을 사용할 수 있습니다. 211 00:17:10,329 --> 00:17:14,550 우리는 어떤 알파벳 문자를 지정할 탈출 W를 사용할 수 있습니다. 212 00:17:14,550 --> 00:17:20,329 어떤 정수 비유 탈출 D 님 - 수치 문자입니다. 213 00:17:20,630 --> 00:17:27,440 우리는 지정할 수 있습니다 - 우리는 관련 식을 지정하는 브래킷을 사용할 수 있습니다. 214 00:17:27,440 --> 00:17:30,970 그래서 이것은 A, B 또는 C를 받아 들일 것입니다. 215 00:17:31,320 --> 00:17:37,000 우리는 또한 지정하거나 또는 B 중 하나에 대한 옵션 수 있습니다. 216 00:17:37,000 --> 00:17:41,110 - 예를 들어, 우리는 여러 가능성을 찾고있는 경우 217 00:17:41,110 --> 00:17:44,940 괄호 안에 우리와 같이 OR 연산자를 사용할 수 있습니다 - 218 00:17:44,940 --> 00:17:52,480 그래서 우리가 여기이 예제로 돌아가 보자. 219 00:17:53,000 --> 00:17:59,790 다음 우리가 여기이 예제로 돌아가 보자, 그리고 - 그리고 지금 우리가 보자 220 00:17:59,790 --> 00:18:12,290 AE을 - 그래서 이것은 반환해야합니다 -이 아직도 아브라함 것 같아요. 221 00:18:12,290 --> 00:18:17,410 이 때문에 - 우리 모두 할 경우 - 큰. 222 00:18:17,410 --> 00:18:22,700 그래서 우리가 여기에 텍스트를 업데이트 할 수 있습니다. 223 00:18:22,700 --> 00:18:34,690 "그의 감치 동안 아브라함은 햄을 먹고 -. 잡기 동안" 좋아요. 224 00:18:44,090 --> 00:18:47,330 모든. 좋아요. 이제 우리는 햄, 햄, 그리고 단을 얻는다. 225 00:18:48,510 --> 00:18:59,370 인연 동안 - 그 콧노래 동안 - 단 그 하십시요 콧노래 동안. 좋아요. 226 00:19:00,350 --> 00:19:03,250 그런 것 같아요. 227 00:19:03,820 --> 00:19:09,180 이제 모든 잡음 또는 그를 데리러하지 않고 여전히, 햄, 햄, 그리고 단 반환합니다. 228 00:19:09,940 --> 00:19:22,600 큰 - 우리는 하나를보고 싶으면 그래서 그걸 - 우리는 할 수 229 00:19:23,510 --> 00:19:33,810 그 사람이나 - 우리는 돌아올 것이다. 230 00:19:34,810 --> 00:19:45,760 좋아요 - 너무 - 좋아 - 위치에 당신은 또한 캐럿 또는 달러 기호를 사용할 수 있습니다 231 00:19:45,760 --> 00:19:49,350 당신이 시작 무언가 또는 문자열의 끝 찾고있는 지정합니다. 232 00:19:50,260 --> 00:19:52,260 또는 시작 또는 단어의 끝. 233 00:19:52,400 --> 00:19:54,470 그것은이를 사용하는 한 가지 방법입니다. 234 00:19:55,630 --> 00:20:01,160 >> 좋아요 - 그래서 우리는 텍스트의 약간 큰 블록 놀러 할 수 있습니다. 235 00:20:03,950 --> 00:20:08,310 우리는 여기에이 행을 가정 해 봅시다 -이 문을 여기에. 236 00:20:08,310 --> 00:20:11,360 정규 표현식의 힘은 패턴을 지정할 수 있다는 것입니다 237 00:20:11,360 --> 00:20:13,390 그냥 문자를 고정하지. 238 00:20:14,900 --> 00:20:18,790 우리가 만들자 - 우리가이 블록을 호출 할 수 있습니다. 239 00:20:22,400 --> 00:20:27,110 그 다음 우리는 안으로 모두를 읽 240 00:20:28,890 --> 00:20:50,820 그리고이 - 우리 모두 =를 만들어 보자, 우리가 수익성 여기에서 검색 할 수있는 몇 가지 그래서 무엇입니까? 241 00:20:50,820 --> 00:20:54,070 우리는 표현의 귀를 찾을 수 있습니다. 242 00:20:55,050 --> 00:21:01,520 그다지 재미. 방법에 대해? 우리는 어떻게 볼 수 있습니다. 243 00:21:03,710 --> 00:21:05,710 나는 그것을 문제를 주었다. 244 00:21:06,380 --> 00:21:10,750 그래서 다시 모든 이전에 일의 수. 245 00:21:10,750 --> 00:21:15,630 그래서 처음부터 최대 아마도 모두 다시 몇 번에 모두를 반환해야합니다. 246 00:21:18,800 --> 00:21:21,970 그리고 여기에 우리가 정규 표현식의 힘이있다 그들이 247 00:21:21,970 --> 00:21:24,900 패턴을 지정할 수 있습니다 여기에 문자뿐만 아니라이다. 248 00:21:24,900 --> 00:21:28,510 그래서 위로 최종 다시 모든 방법은, 그것은 가장 왼쪽에 시작 욕심이었다. 249 00:21:30,710 --> 00:21:32,710 우리가 보자 - 우리는 당신을위한 다른 어떤 볼 수 있었다. 250 00:21:32,710 --> 00:21:39,860 당신이 대명사를 찾고에 관심이 있다면 내가 한 가지를 추측 그녀와 그, 251 00:21:39,860 --> 00:21:44,600 당신의 0 또는 1에 해당되는 확인 수 252 00:21:44,600 --> 00:21:49,710 그리고 표정은 그가, 그리고 그 아마 반환하지 않을 것입니다 - 253 00:21:49,710 --> 00:21:58,020 오, 난 거기에 우리가 여기, 힘, 그 날에 있습니다 찾고 있기 때문에 그 반환 같아요. 254 00:22:00,590 --> 00:22:06,270 우리가이 일의 시작에 와야하도록 지정 해보자. 255 00:22:06,640 --> 00:22:09,530 그 오프 인하의 경우 우리가 보자. 256 00:22:09,530 --> 00:22:19,630 그래서 우리는 지방을 할 수 있고, 거기에 우리가 아무것도하지 않기 때문에 그녀와 그 257 00:22:19,630 --> 00:22:22,870 이 문구에서 발생하지 않습니다. 258 00:22:24,960 --> 00:22:30,410 좋아요. 좋아요 - 그래서 다시 고양이 여기에. 259 00:22:30,410 --> 00:22:35,720 그래서 복잡한 패턴은 뇌를 아프게합니다. 260 00:22:35,720 --> 00:22:40,500 우리는 이러한 문제를 방지하기 위해 정규 표현식을 사용하는 이유 그래서입니다. 261 00:22:40,820 --> 00:22:43,520 >> 그래서 여기 당신과 함께 놀러 할 수있는 몇 가지 다른 유용한 모드입니다. 262 00:22:43,520 --> 00:22:50,290 오늘날 우리는 검색에 보였다, 그러나 당신은 또한 일치, 분할,별로 findAll 및 그룹을 사용할 수 있습니다. 263 00:22:50,290 --> 00:22:53,970 당신은 단지 외에 정규 표현식으로 할 수 있도록 다른 멋진 것들 264 00:22:53,970 --> 00:22:58,870 패턴을 찾고 패턴을 복용하고 모든 경기를 잡고 - 265 00:22:58,870 --> 00:23:02,530 그 변수 - 그리고 나중에 코드에서 사람들을 사용. 266 00:23:02,850 --> 00:23:05,980 그것은 매우 도움이 될 수 있습니다. 다른 일들이 계산 될 수 있습니다. 267 00:23:05,980 --> 00:23:11,720 그래서 우리는 정규식 패턴의 인스턴스의 수를 셀 수 있습니다 268 00:23:11,720 --> 00:23:13,960 그리고 그 우리가 그룹을 사용할 수 있습니다 것입니다. 269 00:23:13,960 --> 00:23:17,550 다른 모드도 가능합니다. 270 00:23:18,040 --> 00:23:22,980 그래서 난 그냥 당신이 정규 표현식을 사용할 수있는 다른 방법에 대해 조금 더 이야기하고 싶다. 271 00:23:22,980 --> 00:23:29,100 >> 그래서 한 번 더 고급 응용 프로그램은 퍼지 매칭입니다. 272 00:23:29,100 --> 00:23:33,450 당신은 표현, 율리우스 카이사르에 대한 텍스트를 찾고 있습니다 그렇다면 273 00:23:33,450 --> 00:23:37,740 그리고 당신은 다른 언어로 가이우스 율리우스 카이사르 또는 이름 줄리어스 시저 중 하나를 참조하십시오 274 00:23:37,740 --> 00:23:44,400 당신은 또한이 값에 약간 무게를 할당 할 수 있습니다. 275 00:23:44,400 --> 00:23:48,930 그리고 그것은 충분히 가까이있는 경우 - 그것은 특정 임계 값을 교차하는 경우 - 그럼 당신이 원하는 276 00:23:48,930 --> 00:23:50,860 율리우스 카이사르를 받아 들일 수 있습니다. 277 00:23:50,860 --> 00:24:00,580 그래서뿐만 아니라 몇 가지 다른 언어 그것에 대해 몇 가지 다른 구현이 있습니다. 278 00:24:02,580 --> 00:24:08,420 쉽고 간단한 응용 프로그램에 대한 온라인 - 여기에 몇 가지 다른 도구, 정규식 팔은 279 00:24:08,420 --> 00:24:12,190 귀하의 정규 표현식이 올바르게 구성되어 있는지 확인합니다. 280 00:24:12,190 --> 00:24:18,500 바탕 화면에서 실행할 수있는 독립형 도구도 있습니다 281 00:24:18,500 --> 00:24:22,100 울트라 피코, 그리고뿐만 아니라, 그냥 요리 책처럼. 282 00:24:22,100 --> 00:24:25,410 당신은 정규 표현식의 톤을 포함하는 프로젝트를하고 있습니다 그래서 만약 283 00:24:25,410 --> 00:24:29,810 이것은 아마도 오늘날의 범위에 갈 수있는 장소입니다. 284 00:24:31,520 --> 00:24:35,770 그리고 당신에게 그것이 얼마나 공통의 감각을주는 285 00:24:35,770 --> 00:24:44,090 GREP 유닉스있어, 펄이 내장되어 있습니다, 그리고 C C.에 대한 PCRE가 286 00:24:44,090 --> 00:24:48,890 그리고 모든 다른 언어는 정규 표현식 패키지를이 287 00:24:48,890 --> 00:24:52,020 그것은 우리가 오늘날의 맛을 가지고 본질적으로 동일한 구문을 사용하여 작동합니다. 288 00:24:52,020 --> 00:24:54,790 PHP, 자바, 루비, 등등. 289 00:24:56,080 --> 00:24:58,980 >> Google 코드 검색은 실제로 언급 할 가치이며 그것은 중 하나입니다 290 00:24:58,980 --> 00:25:05,720 대중에 액세스 할 수 있습니다 거기에 상대적으로 적은 응용 프로그램 291 00:25:05,720 --> 00:25:07,800 정규 표현식을 사용하여 데이터베이스입니다. 292 00:25:07,800 --> 00:25:12,920 당신이 Google 코드 검색에 보면 그래서 만약 당신이 코드를 찾을 수 있습니다 293 00:25:12,920 --> 00:25:16,880 이 기능을 사용하는 방법을의 인스턴스를 찾고 있다면, 294 00:25:16,880 --> 00:25:21,610 당신은 다른 모든 종류의 경우에 사용되는 해당 기능을 찾을 정규 표현식을 사용할 수 있습니다. 295 00:25:21,610 --> 00:25:28,000 당신은 fwrite 같은을 찾을 수 있으며 당신은 쓰기의 깃발을 찾아 읽거나 수 296 00:25:28,000 --> 00:25:32,000 당신이 경우에 사용되는 fwrite 같은의 예제를 원한다면. 297 00:25:33,530 --> 00:25:37,010 여기에 그래서 같은이 것, 그리고 몇 가지 참조입니다. 298 00:25:37,010 --> 00:25:40,990 이 때문에 앞으로 갈뿐만 아니라, 온라인이 될 것입니다 299 00:25:40,990 --> 00:25:45,560 당신은 파이썬, GREP, 펄에서보고 싶어 - 당신은 영감을 얻으려면 300 00:25:45,560 --> 00:25:50,650 여기에 이​​론에서 더보고 싶은 경우 나 장소에 떨어져 좋은 점프입니다. 301 00:25:50,650 --> 00:25:53,870 정말 감사합니다. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]