• ベストアンサー

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

pacman_chieの回答

  • ベストアンサー
回答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バイトと思っていましたが、ユニコードは違うことを今になり初めて知りました。 また正規表現に計算能力がないということで確実に難しいことは何かが判りました。 文字長をカウント可能なら全パターン一纏めで指定可能と考えていたのですが、無理ということで可能な限り大まかなパターンを詰め込むことにいたします。

関連するQ&A

  • 正規表現で特定文字列の全角カナと半角カナの両方を検索したいと思っています。

    正規表現で特定文字列の全角カナと半角カナの両方を検索したいと思っています。 たとえば リンゴ と リンゴ(半角カナ) にマッチする正規表現、ということです。 想定環境はWindowsXP Pro+秀丸7です。 意味不明でしたら加筆修正しますのでよろしくお願いします。

  • 正規表現で単語以外に使われている文字を検索した

    タイトルどおりなのですが、英文のテキストがあり、 OCR処理をしているので、数字のゼロがオーになっている箇所があります。 その部分を検索したいのですが、 正規表現で単語以外に使われている文字(オーやエルなど)を 検索する方法というのはありますでしょうか? いろいろな正規表現サイトを見て勉強はしてみたのですが、 どうしても作ることができず質問させてもらいました。 どなたかご教授願います。

  • PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教

    PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教えてください。 PHPで、ウェブサービスをUTF-8で構築中です。入力項目のうち、1項目を半角英数(0-9、a-z、A-Z)と全角文字の利用を許可したいと考えています。 正規表現を使って判断しようとし、検索して調べてました。しかし、半角英数のみとか、全角文字のみで構成されている場合、という例は見つかるのですが、半角英数と全角文字の複合のみをチェックする方法がわからずにおります。 この ・半角英数、または全角文字で構成されている という条件をチェックする記述方法を教えてください。 今回除外したいのは、半角の記号(0-9、a-z、A-Z以外の半角文字)ですので、 ・半角の記号が含まれている という条件をチェックする記述方法でもかまいません。 また、正規表現でなくても実現できるのであれば、正規表現にこだわる必要もありません。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 正規表現の空白文字について

    Javaで正規表現を使って文字列のマッチング処理を勉強しています。 パラメータで渡されてきた値に"name="と入っている場合、マッチOKに したいのですが、 "name" と "="の間には、全角、半角スペースが複数混在している可能性があり、 その場合もマッチOKにしたいです。 アドバイスをお願いします。 ・マッチOKにしたい文字列  name=  name =  name =  name  =  name   =  など。 name" と "="の間には、全角、半角スペースが複数存在している可能性あり。 スペースなし(name=)の場合もマッチOKにしたい。 以下のようにすると全角のみ、半角のみのスペースなら1文字以上入っていても マッチOK(スペースなし(name=)の場合もマッチOK)ですが、 全角と半角のスペースが混在してしまうとマッチOKになりません。 String param = "name=mike"; Pattern p = Pattern.compile("name( *?|\\s?)=", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(param);

    • ベストアンサー
    • Java
  • 正規表現について

    全角文字と半角文字のスペースの有無を正規表現で検出したいと思っております。 書き方をお教え頂けますでしょうか。 よろしくお願いいたします。

  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • 秀丸エディタの正規表現

    秀丸エディタの正規表現 これから述べる置換処理について教えてください。 条件を表現します。 まず半角空白文字を _ このように全角アンダースコアであらわします。 そしてマッチさせたいSTRINGは _ このように半角空白文字がそれ以外の文字に前後をはさまれている状態ではなくて、 、 __ このように半角空白文字二個もしくは二個以上続いたものが半角空白文字以外に挟まれているパターンです。 。 ちなみに置換後の文字列は __ ですつまり空白半角文字列二個です。 よってこの質問は次のようにも言い換えられます。 。 検索文字列 半角空白文字二個以上 を置換後文字列 半角空白文字二個に置き換える。もしくは、半角空白文字三個以上を 置換後文字列 半角空白文字二個に置き換える。 というのが質問です。おねがいします。 すみませんつけたしです。上記を実現する正規表現を教えてください。

  • 正規表現:囲われた文字列の置換

    シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。  全角文字のみ  半角文字のみ  全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。

  • 正規表現で特定文字に挟まれた範囲内での検索

    VS CODE にて文字列の正規表現で文字列(プログラムではありません)の検索をしたく質問いたします。 (A B C)<A B C> という文字列があり、この中の半角スペースを別の文字に置換したいのですが、全ての空白ではなく( )に挟まれた中の半角スペースだけを検索したいと思っています。 ↑の用な文字列から( )内の半角スペースだけを照らし出す正規表現を教えていただいていただけると嬉しいです。

  • 正規表現で、全角文字を半角文字にする方法

    エディター等で使用できる、通常の正規表現で、例えば、全角文字を半角文字にする方法はありますでしょうか? ※つまり、PerlのtrやPHPのstrtrのようなことです。 例えば、正規表現対応のエディターで、サイト全体の全角英数字を半角英数字にするような処理をしたいのですが。

    • ベストアンサー
    • Perl