2009-07-21 5 views

答えて

0

私は今見つけることができない国際的な正規表現についてのここでの議論が最近ありました。現在の状況では、正規表現は一般的にデフォルトのラテンアルファベットのみで可能であると考えています。

+0

「構築、独自の」標準ラテンアルファベット外で作業しているとき。 – patjbs

0

特別な「単語文字クラス」\wがあなたに役立つかどうか試してみてください。注意:これは数字にも一致します。おそらく、あなたは正確に何を達成したいのかという事例を明確にすることができますか?

\waäまたはá(も0)と一致すべきです。

\w(?<!\d)aäまたはá(ただし0)と一致します。

\w+börkと一致し、l33tとなります。

\b(?:\w(?<!\d))+\bは、börkと一致しますが、l33tと一致しません。

+0

CF正規表現では\ wは英数字とアンダースコアにのみ一致し、負のルックアヘッドはサポートしていません。 –

3

ColdFusionでは、Unicode正規表現はうまく処理されません。 #Chr(375)#のようなものを使って文字を正規表現の文字列にすることはできますが、それをするのは面倒です。

しかし、JavaはUnicodeで動作し、CFはJavaを簡単に使用できるため、Java正規表現を使用してUnicodeマッチングを行うことができます。正規表現ここではUnicodeの詳細で

\p{L} 


これは、Javaの正規表現での単一のUnicode文字にマッチしますhttp://www.regular-expressions.info/unicode.html


そしてCFのJava正規表現を使用するなど、ほかの単純な置き換えはこれだけです:

<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) /> 

。この時点で、それはまだかなりのだ、という第二


関連する問題