2016-05-25 20 views
0

正規表現に関する質問があります。過去の質問で述べたように、私は半完成のアドレス解析に取り組んでいます。REGEXP_COUNTと重複パターン

1つのエリアでは、住所にあまりにも多くのルートがあるかどうかを確認しています。私はN、E、S、W、NE、NW、SE、SWの短縮形しかチェックしていません。私の現在の表現はうまくいきますが、コードの残りの部分でよりうまく収まるように別のものを求めています。

REGEXP_LIKE(ADRS, '(^|\s)' || DIRN || '\s(|.+\s)' || DIRN || '(\s|$)', 'i') 

DIRN = '(N|S|E|W|NW|NE|SE|SW)'; 

私はREGEXP_COUNT(ADRS, '(\s|^)' || DIRN || '(\s|$)', 1, 'i')

を使用したいが、私はそれが正しく"N E S W"ような場合には数える習慣を知っています。この場合、カウントは2になります。これは、NとEの間のスペースがNケースの一部と見なされるためです。したがって、「ES」で続行され、Eがラインの始まりとみなされませんスペースは既に取られています。

は、今ではすべての4をカウントするように変更することは簡単ですが、私は唯一の1

は、だから私は可能たい式のタイプでほしいときカウントが3であるとして、それは「北朝鮮アルバート・S」のために動作しません。 ?もしそれが何であれば?

答えて

0

語境界の一致では、\bはサポートされません。

最も簡単な方法は、二つのスペース文字と空白文字のすべての実行を交換することで、その後、あなたの正規表現を使用して一致させることができます。Oracleは、境界をサポートしている場合

REGEXP_COUNT(
    REGEXP_REPLACE(ADRS, '\s+', ' '), 
    '(\s|^)' || DIRN || '(\s|$)', 
    1, 
    'i' 
) 
+0

は偉大だったでしょうが、これはあります周りの良い仕事。 – DanSask

関連する問題