• ベストアンサー

正規表現で単語長(文字数?)を検索は可能でしょうか

正規表現で可能かどうかもわからず質問しています。 単語を構成する文字長で検索は可能でしょうか。 例えば、 全角(2バイト)8文字、半角(1バイト)6文字 計全角11文字(22バイト)相当 全角(2バイト)3文字、半角(1バイト)16文字 計全角11文字(22バイト)相当 それぞれにマッチ あ12いうえお  6文字相当 き1く234けこ  6文字相当 それぞれにマッチ と言う感じです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

以下、標準的な正規表現の話です。 基本的には無理です。(→ 無理矢理に膨大なパターンを詰め込めば可能。) 正規表現には全角/半角とか、1バイト文字/2バイト文字というような区別は無く、すべて「ある一つの文字」です。 また数を数える、計算するという能力もないので、この例のような「22バイト分の文字列」にマッチさせるのは困難です。 そもそも、1バイト/2バイトというのはShift_JISのことですよね? 世の中には他にも文字コードがあります。 UTF-8ならASCIIの範囲は1バイトですが、漢字は3バイト。UTF-16ならほとんどの文字が2バイト、一部4バイト。というように。 なお、多くの正規表現では文字をUnicodeで表し、\u~の形でコードポイントを指定します。また、\xもあります。 それらにより、ASCIIの範囲とそうでない範囲を分けた表現を作ることは出来ます。

ponsuke_21
質問者

お礼

早速有り難うございます。 利用している文字コードはユニコードです。 今まで全角は2バイトでアルファベットなどは1バイトと思っていましたが、ユニコードは違うことを今になり初めて知りました。 また正規表現に計算能力がないということで確実に難しいことは何かが判りました。 文字長をカウント可能なら全パターン一纏めで指定可能と考えていたのですが、無理ということで可能な限り大まかなパターンを詰め込むことにいたします。