指定されたキーに基づいて大文字、小文字の混在を許可する方法と英字の判定方法

このQ&Aのポイント
  • 指定されたキーに基づいて大文字、小文字を区別しない検索をするためには、uc関数およびlc関数を使用して大文字・小文字の組み合わせで検索を行うことができます。
  • 英字の判定方法は、指定されたキーが英字であるかどうかを判定する必要があります。これには、正規表現を使用することができます。具体的には、指定されたキーが[a-zA-Z]のいずれかの文字を含んでいれば英字と判定します。
  • 以上の方法を組み合わせることで、指定されたキーに基づいて大文字、小文字の混在を許可する検索を実現することができます。
回答を見る
  • ベストアンサー

英字の大文字小文字および混在の扱い

早速ですが、 現在、指定された単語を含む文字列を抜き出す様なcgiを作っています。 現在のコーディングです。 foreach $line (@lines) { $an = index $line,$skey; if ($an >= 0) { 上記では、 $skey と全く同じモノしか検索(抽出)出来ないため、 今回、$skey が英字の時は、大文字、小文字、およびその混在でも 抜き出せるように改善したいと思っています。 例えば、abc と指定されたら、abcでもABCでもAbcでも抜き出せるような。 (英字と数字の混在や、全角は対象外で構いません。) 考え方として、 指定されたキー(文字列)を基に大文字、小文字を作り、 (uc関数、lc関数) 両方で検索してやれば殆どokと思うのですが、 混在の場合はどうやればいいか思いつきません。 また、 そもそも指定されたキーが英字であるかの判断方法が分かりません。 (大文字、小文字の変換は英字に限りますので) ということで、 (1)大文字、小文字の混在時の対応方法 (2)指定されたキーが英字であるかの判断方法 を教えていただきたくお願いします。

  • Perl
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

(1) については ・すべてのものを大文字 (か小文字) に統一する ・index を捨てて m//i くらいは思いつくかな. (2) は (どうしてそういうことをしたいのかちょっと分からないんだけど) キーに対して /[^[:alpha:]]/ でマッチさせるとか.

nagahaha
質問者

お礼

早速有り難うございました。 m//iで全てが解決しました。

関連するQ&A

  • 英字小文字の入力

    Windows2000で立上げ後パスワード入力時、 ABCの各キーを打つと以前はabcと小文字の半角で入力されたのが、大文字で入力されてしまいます。 恐らくシャットダウンしてたちあげればうまくいくだろうとは思いますが、 英字が最初から(変換操作せず)小文字にするにはどうすればいいのでしょうか。

  • 文字列中の英字の位置 VB6

    VB6なんですが。 文字列中の"英字"の位置を探す(例えば、「3-021S236」 ==> 6文字目 ) そんな関数はないのでしょうか? 探した範囲ではありませんでした。 知っている方、よろしくお願いします。  

  • 全角、半角、改行コードが混在文を指定文字数でカットしたい。

    こんにちは。 現在、phpで簡単な動的ページを作成しています。 行き詰っていますのは、文字列抽出?です。 ある文字列を先頭文字から300文字だけ切り出して以降はカットしてしまいたいのです。 但しその文字列が全角、半角、改行コード(EUC)が混在していまして、うまく切り出せません。 混在文字列からも文字列指定で切り出す関数や手段をご存知の方はいらっしゃいませんか? お手数では御座いますが、お教え下さい。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 途中にある一文字を削除したい

    英字と数字のセルがあります。 そこから特定の英字をひとつだけ削除したいのです。 例 ABCD12345 → ABC12345 AMDD29384 → AMD29384 ERKGD45096E → ERKG45096E となるようにです。Dの文字をひとつ削除します。 数字の並びも変則です。英字はだいたい3~6文字ぐらい、数字は6桁ぐらいで、数字の後に英字が1文字ついてるものもあります。 1000行ぐらいあります。 簡単に変換できる方法がありましたら教えてください。 よろしくお願いします。 自分が考えたのは、LFET関数で英字の文字を表示し、LEN関数でその文字数を数え(これは行を分別しやすいように)、REPLACE関数で何文字目を指定し、その指定文字(この場合はD)を空白に変換し、置換で空白をなしにするものです。

  • 全角半角混在の文字列から○文字まで取得する方法

    はじめまして! MySQLから取得した文字列をPHPで例えば10文字まで表示したいのですが、良いやり方ありますでしょうか? 文字列には全角半角が混在しているので substr関数だと、うまく取得できない場合があります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • どうやっても、英字が大文字しか出てこないんです

    お世話になります。 職場で使用中のPCのうち、キーボードをどうやっても(私の分かる範囲で)英字が大文字しか出てこない。 例えば、ミリリットルと入力すればIMEの選択にmlとでてくるのですが、それをワードに指定するとMLになってしまうし、直接ワードに打とうとしても小文字が出てきません。Caps Lockを解除したり、シフトキーを押したり、離しても大文字ばかりで困っております。 この不具合の回避方法を教えてください。

  • 正規表現 許可文字列 かつ 指定連続文字列の排除

    わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。

    • ベストアンサー
    • PHP
  • 《エクセル2000》なぜか文字列になっている半角数字を、一気に数字扱いにするには?

    LEFT関数を使って切り取った半角数字が、文字列扱いになっています。(文字数字混在のセル…つまり文字列であるセルから切り取ったからでしょうか?) セルをダブルクリックし、エンターキーを押すと、こちらもなぜか数字扱いになるのですが(以上一連の作業はISNUMBER関数で確認)、データが数百件あるので、これを一気に行う方法はないでしょうか。 よろしくお願いします。

  • 【C言語】大文字小文字に関わらず文字列を検索したい

    C言語で文字列を検索処理があるものですが、 以下のようなことがうまくできず困っています。 1.検索対象はファイルから読み込んだメモリ内の文字列。 2.対象の文字列は大文字小文字に関わらずに抽出する。 例えば、「abc」を検索するとして、文字列内が aaaaBccccdefgだとすると… aaa「aBc」cccdefg かっこ内を検索します。 strstrだと、完全な一致しかヒットしないので… 長い文字列が対象になることもあるので、 すべての組み合わせを見るのも性能的に難しいです。 何か方法ご存知の方いらっしゃいましたら、よろしくお願いします。

  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP