$pattern = '/([\xEA-\xED][\x80-\xBF]{2}|[a-zA-Z0-9])+/';
$str = 'abc!@하나둘셋#123';
echo $str;
preg_match_all($pattern, $str, $match);
$str = implode('', $match[0]);
echo $str;
==================
abc!@하나둘셋#123
abc하나둘셋123
한글과 영어 숫자를 제외한 나머지문자는 무시하게 된다.
2010. 10. 12.
2010. 2. 15.
사칙연산 정규식(Regular Expression, Java)
안드로이드용 계산기 프로그램을 만들고 있습니다.
허접하지만 어느정도 구현이 되었구요.
계산기 프로그램을 만드는 중에 정규식을 쓸 일이 있었습니다.
정규식을 이용하면서 많은 공부가 되었습니다.
String s = "3+12X9-4/2";
정규식을 이용해서 String에서 숫자와 사칙연산 기호를 분리하려고 합니다.
처음에 썼던 방식은 다음과 같습니다.
String regExp = "[^0-9]";
String[] operands = s.split(regExp);
숫자가 아닌 것들을 구분자로 해서 operands에 3, 12, 9, 4, 2를 넣었습니다.
사실 사칙연산에서 쓰인 '+', '-', 'X', '/' 를 구분자로 하고 싶었는데 '-'가 문제가 되었습니다.
String regExp = "[+-X/]";
위에서 처럼 하면 '-'기호가 문제가 되어 파싱이 안되더군요.
escape 문제인가 싶어서
String regExp = "[+\-X/]";
위의 방법으로 해봤는데 역시나 안되었습니다.
한참을 고민하다가 다른 시도를 해봤는데
String regExp = "[+\\-X/]";
String[] operands = s.split(regExp);
위에 있는 정규식으로 하니 숫자만 파싱이 되더군요.
생각해보니 \\는 \로 인식이 되어서 \\-는 \-로 알아들을테니
'-'기호 문제가 해결되었습니다.
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";
위에서처럼 해도 마찬가지로 파싱이 되었습니다.
============================<결론>=============================
String s = "3+12X9-4/2";
String regExp = "[^0-9]";
String[] operands = s.split(regExp);
위와 같이 하면 숫자만 파싱할 수 있다.
아래와 같은 정규식을 써도 숫자만 파싱할 수 있다.
String regExp = "[+\\-X/]";
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";
피드 구독하기:
글 (Atom)