자바스크립트에서 match 사용하기 Regular Expression

자바스크립트에서 정규 표현식 사용하기

자바스크립트에서는 주로 test(이미 본 적이 있을 것이다)와 replace라는 메서드에서 정규 표현식을 쓸 것이다. test 메서드가 단지 전달한 인자와 정규 표현식의 일치 여부를 알려주는 데 반해, replace 메서드는 일치하는 텍스트를 대체할 문자열을 나타내는 두 번째 매개변수를 취한다. 대부분의 함수와 비슷하게 replace 메서드는 새로운 문자열을 반환값으로 생성하므로 입력된 문자열을 변경하지 않는다.

두 메서드를 비교하는 차원에서 아래 문장을 살펴보자. 아래 문장은 "cats"라는 단어가 전달한 문자열의 어딘가에 적어도 한번 나타나면 true를 반환한다.
document.write(/cats/i.test("Cats are fun. I like cats."))
하지만 다음 문장은 "cats"가 나타나는 곳을 "dogs"로 바꾸고 그 결과를 출력한다. 검색은 전역적으로(/g) 이루어져 모든 단어가 출현하는 곳을 찾고, 대소문자를 구별하지 않으므로(/i) 대문자로 쓴 "Cats"도 찾는다.
document.write("Cats are fun. I like cats.".replace(/cats/gi,"dogs"))
위 문장을 실행하면 replace의 한계를 확인할 수 있다. replace는 문자열을 정확히 사용하려고 하는 문자열로 바꾸기 때문에 첫 단어인 "Cats"는 "Dogs"가 아닌 "dogs"로 바뀐다.

PHP에서 정규 표현식 사용하기

PHP에서 쓸 법한 가장 널리 쓰는 정규 표현식 함수는 preg_match, preg_match_all, preg_replace이다.

어떤 문자열에서 대소문자를 구별하지 않고 "cats"라는 단어가 나타나는지 검사하려면 아래처럼 preg_match를 쓰면 된다.
$n = preg_match("/cats/i", "Cats are fun. I like cats.");

PHP에서는 1을 TRUE로, 0을 FALSE로 사용하므로 이전 문장에서는 $n이 1로 설정된다. 첫 인자는 정규 표현식이고 둘째 인자는 일치할 텍스트이다. 하지만 preg_match는 실제로 더 강력하고 복잡한데, 이 함수는 일치할 텍스트를 나타내는 셋째 인자를 받기 때문이다.
$n = preg_match("/cats/i", "Cats are fun. I like cats.", $match);echo "$n Matches: $match[0]";

셋째 인자는 배열(여기서는 $match)이다. 이 함수는 일치하는 텍스트를 첫 요소로 넣으므로 만약 일치가 성공하면 $match[0]에서 일치된 텍스트를 확인할 수 있다. 이 예제에서는 출력 결과를 통해 일치된 텍스트가 대문자로 시작함을 알 수 있다.
1 Matches: Cats

일치 위치를 모두 확인하고 싶다면 아래처럼 preg_match_all 함수를 쓰면 된다.
$n = preg_match_all("/cats/i", "Cats are fun. I like cats.", $match);echo "$n Matches: ";for ($j=0 ; $j < $n ; ++$j) echo $match[0][$j]." ";

전과 마찬가지로 $match를 함수에 전달했으며, $match[0]에는 일치된 결과가 할당되는데, 이번에는 2차원 배열의 부배열(sub-array)로 할당된다. 이 예제에서는 부배열을 보여주기 위해 for 루프를 이용해서 배열을 순회하였다.

문자열의 일부를 바꾸고 싶으면 아래처럼 preg_replace를 쓰면 된다. 이 예제는 대소문자를 구별하지 않고 "cats"가 나타나는 곳을 모두 "dogs"으로 바꾼다.
echo preg_replace("/cats/i", "dogs", "Cats are fun. I like cats.");

덧글

댓글 입력 영역


통계 위젯 (화이트)

02
8
300123