2009-07-21 3 views

답변

0

내가 지금 찾을 수없는 국제 정규 표현식에 관한 토론 여기에 최근에 있었다. 현재 정규 표현식은 일반적으로 기본 라틴 알파벳만으로 가능하다는 것이 현재의 상황이라고 생각합니다.

+0

"구축 자신의"표준 라틴 알파벳 이외의 작업을 할 때. – patjbs

0

특수 "단어 문자 클래스"\w이 적합한 경우 사용해보세요. 주의 : 숫자와도 일치합니다. 아마도 당신이 정확하게 달성하고자하는 것을 예제로 명확히 할 수있을 것입니다.

\w

는 일치해야합니다 a, ä 또는 á (뿐만 아니라 0).

\w(?<!\d)

이 일치 a, ä 또는 á (그러나 0).

\w+börk과 일치하지만 l33t이됩니다.

\b(?:\w(?<!\d))+\bl33t이 아닌 börk과 일치합니다.

+0

CF 정규식을 사용하면 \ w는 영숫자와 밑줄 만 일치하며 음수 lookbehind를 지원하지 않으므로 예제가 의도 한대로 작동하지 않습니다. –

3

ColdFusion은 유니 코드 정규 표현식을 제대로 처리하지 못합니다. #Chr(375)#과 같은 것을 사용하여 정규식 문자열로 문자를 가져올 수 있지만 그렇게하기가 다소 지저분합니다.

그러나 Java는 유니 코드와 함께 작동하며 CF는 Java를 쉽게 사용할 수 있으므로 Java 정규 표현식을 사용하여 유니 코드 일치를 수행 할 수 있습니다. 정규식 여기에 유니 코드에 대한 자세한 내용과 함께

\p{L} 

:


이 자바 정규식에서 하나의 유니 코드 문자와 일치합니다 http://www.regular-expressions.info/unicode.html


그리고 CF에서 자바 정규식을 사용하는 등 잘 간단한 교체 만하면됩니다.

<cfset NewString = OldString.replaceAll('\p{L}','ReplaceWith') /> 

문자열을 바꿀 필요가 있습니다. 그렇게 할 수 있습니다.

그러나 일치 (재 대합에 해당) 또는 더 복잡한 기능을 원하면 가장 간단한 해결책은 Java 정규식 기능을 호출 할 수있는 일반 CFML 기능이있는 사용하기 쉬운 CFC로 래핑하는 구성 요소를 사용하는 것입니다. jre-utils.cfc

처럼 이것은 당신이 할 수 있습니다 : 문자열에서 (유니 코드) 단어의 배열을 반환합니다

<cfset jre = createObject('component','jre-utils').init() /> 

<cfset Matches = jre.match('\p{L}++' , String) /> 

. 이 시점에서 아직도 꽤 많이 있어요, 그 두번째