ワイルドカードは簡単な文字検索方法で
正規表現は難しいパターンも調べられる文字検索方法ですか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

「ワイルドカードと正規表現」じゃなくて、「ファイル名のマッチと正規表現」の事ですかね。



ワイルドカードはトランプ用語で、「他のどんなカードの代わりにも使えるカード(多くの場合ジョーカー)」のことです。そこから転じて、「他のどんな文字にもマッチする特殊文字」の意味で使われます。

ファイル名のマッチ: コマンドラインや、プログラミング言語の一部の関数でのファイル名の指定に使う
 ? どんな1文字にもマッチ(ワイルドカード)
 * 0文字以上のどんな文字列にもマッチ(文字列のワイルドカード)
 Windowsで使えるのは上記2つですが、Unix/Linuxのシェルだともう少しあります。

正規表現: プログラミング言語から様々な文字列パターンを選択するときに使うパターン
 . どんな1文字にもマッチ(ワイルドカード)
 * 直前の表現の0回以上の繰り返し(繰り返し指定子の一つ)
 他に多数あり。

それぞれ使い場所が違います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/10/10 19:41

見た目は似てますが全く別物です。


本来、正規表現は正規言語を表現するためものです(形式言語とかオートマトンとかを勉強してください)。
ワイルドカードは何にでもマッチする特殊文字、ただそれだけ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/10/10 19:41

>ワイルドカードと正規表現って何が違うのでしょうか?



自分で作成して業務で検索する仕事につけば、わかることがらです。

>正規表現は難しいパターンも調べられる文字

”難しい”と言う表現は合わない。”適切な検索結果をもたらすための手段”となる。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/10/10 19:41

正規表現に於ける一つの表記方の一つとしてのワイルドカード

    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2013/10/10 19:41

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現とワイルドカード

この二つは使用に違いがあるのはわかるのですが、どのような時に使い分けるのでしょうか?
調べて見たのですが、シェルによるとかコマンドによるとか書かれていましたがいまいちよくわかりません。
こういうときは正規表現、こんなときはワイルドカード、という風に使い分けに違いがあれば教えて下さい。

Aベストアンサー

シェルは「*」などのメタキャラクタを扱う際、自分なりのルールに則って解釈していきます。このシェルの解釈の仕方をワイルドカードといいます。シェルはメタキャラクタを正規表現として扱いません。これは仕様です。

> こういうときは正規表現、こんなときはワイルドカード、という風に使い分けに違いがあれば教えて下さい。

故に「使い分け」とは意味合いが少しばかり違うのです。どちらかというと「使い方」に気を配る、というイメージでしょうか。
コマンドラインを管理するのはシェルです。ということは、コマンドラインに出現するメタキャラクタはすべてシェルがワイルドカードとして展開します。

ただし、grep, sed や awk など一部のコマンドはその性質上、引数の全て、あるいは特定の部分に指定された文字や文字列を正規表現として解釈します。これも仕様です。

よって、正規表現を扱うコマンド、即ち上記 grep などがコマンドライン中に「*」や「$」などのメタキャラクタを伴って登場した際、シェルとの争奪戦になります。そこでクォーティングなる気配りが必要になります。

とは言うも、このメタキャラクタの解釈には順序というものがあり、先にコマンドライン全体を解釈するのはシェルである、ということを知っておくとより理解が深まると思います。

シェルは「*」などのメタキャラクタを扱う際、自分なりのルールに則って解釈していきます。このシェルの解釈の仕方をワイルドカードといいます。シェルはメタキャラクタを正規表現として扱いません。これは仕様です。

> こういうときは正規表現、こんなときはワイルドカード、という風に使い分けに違いがあれば教えて下さい。

故に「使い分け」とは意味合いが少しばかり違うのです。どちらかというと「使い方」に気を配る、というイメージでしょうか。
コマンドラインを管理するのはシェルです。ということ...続きを読む

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

Qword置換で改行は置換できますか?

word置換で改行は置換できますか?

 一斉にEnterでの改行されている部分を置換する方法はないでしょうか?
 あればよろしくおねがいします。

Aベストアンサー

検索と置換画面の「置換」タブ画面で [オプション] を選択し、右下にある「あいまい検索」のチェックを外します。
検索する文字列にカーソルを置いて、[特殊文字] ボタン → 段落記号(P) を選択すると、検索する文字列に 「^p」が入力されます。(直接キー入力してもOKです)

置換後の文字列に置換する文字列、特殊文字を入力して置換をしますが、何も指定しないで、「置換」または「すべて置換」を行うと、改行が削除されます。

特殊文字の一覧項目の「段落記号」は[Enter]による改行で、[Shift]+[Enter]による改行は、「任意指定の行区切り(L)」です。
 

QUNIX コマンドにおける # や円マークの意味

お世話になっております。
Unix の表現上の#と¥(円)、セミコロンマークの意味と使い方を教えて下さい。

例 # find . -not -name xxxx -exec cp -v -p --parents {} /mnt/hda1/test/ \;

1.上記の時 # は root によるコマンドプロンプトなので打ち込む必要はないでよいでしょうか

2.上記で¥(円)マークと;(セミコロン)マークの意味は何でしょうか。
  ;(セミコロン)マークは行の終わりとあったのですが、入力する必要がありますか。

3.以下で¥(円)マークは表現上2行になるから記述してあるだけで、
  1行で入力できるなら¥マークを入力しなくてもよいのでしょうか
  それともコマンドラインで2行になるコマンドなので入力してエンターを押し、
  コンソールに2行だと認識させるべきものなのでしょうか
   # nice -5 /usr/bin/pkg - 65536 > \
   /mnt/hda1/hoge

パイプやリダイレクトの意味と使い方は知っているのですが、
複合コマンドは今一つ分かりません。
教えて下さい。よろしくお願いします。

お世話になっております。
Unix の表現上の#と¥(円)、セミコロンマークの意味と使い方を教えて下さい。

例 # find . -not -name xxxx -exec cp -v -p --parents {} /mnt/hda1/test/ \;

1.上記の時 # は root によるコマンドプロンプトなので打ち込む必要はないでよいでしょうか

2.上記で¥(円)マークと;(セミコロン)マークの意味は何でしょうか。
  ;(セミコロン)マークは行の終わりとあったのですが、入力する必要がありますか。

3.以下で¥(円)マークは表現上2行になるから記述してあるだけで...続きを読む

Aベストアンサー

1. このケースでは、おそらくはそうです。
が、本当にシェルスクリプトでのコメントの場合もあります。

2. \には「続く文字との組合せで特別な意味を持たせる」「本来特殊な意味を持つ文字の前に置いて、その意味を無効にする」というのが主な役割りです。
通常、 ;は、複数コマンドを連続実行する際の、各コマンドの区切りとして機能します。
そこで、それを無効にしてセミコロンという文字として使いたい時は
・バックスラッシュ(円マーク)でエスケープする \;
・引用符で文字列にする ';' ";"
等の方法を使います。

ここから先はfindコマンドの話になります。
findコマンドでは -exec 「コマンド」 として見つかったファイルやディレクトリに対して「コマンド」を実行できます。
このときに、どこまでが「コマンド」かを示すために セミコロンを使います。
ところが、 ; そのままではfindコマンド全体の終了と解釈されてしまうので、\; などを使います。

3. このケースでは、1行に書いて問題ありません
\の直後に改行がある場合は、「\改行」をスペースに置き換えたようなものだと考えてください

1. このケースでは、おそらくはそうです。
が、本当にシェルスクリプトでのコメントの場合もあります。

2. \には「続く文字との組合せで特別な意味を持たせる」「本来特殊な意味を持つ文字の前に置いて、その意味を無効にする」というのが主な役割りです。
通常、 ;は、複数コマンドを連続実行する際の、各コマンドの区切りとして機能します。
そこで、それを無効にしてセミコロンという文字として使いたい時は
・バックスラッシュ(円マーク)でエスケープする \;
・引用符で文字列にする ';' ";"
等の方法を使い...続きを読む


人気Q&Aランキング