Bシェルの正規表現を教えてください。
ある文字列の中に英数大文字、小文字、コンマ、ピリオド、アンダーバー、ハイフン以外が含まれていないかをチェックしたいです。以下のようにすると文字列LINEの先頭にあるとチェックできるのに、中にあると出来ません。教えてください。
if expr \"$LINE\" : [^a-zA-Z0-9\\,\\.\\_\\-] >/dev/null ; then
echo \"チェックNG 使用不可能な文字が入っています。 ${LINE}\" >> ${LOG_FILE}
else
echo \"チェックOK ${LINE}\" >> ${LOG_FILE}
fi
No.2ベストアンサー
- 回答日時:
「以外」を調べるよりも、文字列が指定の文字だけで始めから終りまで構成されている事を確認する方が簡単かと思われます。
if expr "$LINE" : "^[A-z0-9,._-]*$" > /dev/null; then
echo "OK"
...
でどうでしょうか。
ご回答ありがとうございます。
「^」を前に出してやってみたのですが、以下のようなエラーが表示されてしまいます。実行結果は期待通りっぽいのですが、このエラーは無視してもよいのでしょうか?ご教授お願いいたします。
expr: 警告: 可搬でない BRE: `^[a-zA-Z0-9\,\.\_\-]*$': 基本的な正規表現の最初の文字として
`^' を使うことは可搬ではないので無視します
No.4
- 回答日時:
お使いのシステムは具体的になんでしょうか?
http://opengroup.org/onlinepubs/007908775/xbd/re …
にある仕様から考えても、
Regular Expressions
" BRE Expression Anchoring
A BRE can be limited to matching strings that begin or end a line; this is called anchoring. The circumflex and dollar sign special characters will be considered BRE anchors in the following contexts:
1. A circumflex (^) is an anchor when used as the first character of an entire BRE. The implementation may treat circumflex as an anchor when used as the first character of a subexpression. The circumflex will anchor the expression (or optionally subexpression) to the beginning of a string; only sequences starting at the first character of a string will be matched by the BRE. For example, the BRE ^ab matches ab in the string abcdef, but fails to match in the string cdefab. The BRE \(^ab\) may match the former string. A portable BRE must escape a leading circumflex in a subexpression to match a literal circumflex.
3. A BRE anchored by both "^" and "$" matches only an entire string. For example, the BRE ^abcdef$ matches strings consisting only of abcdef. "
先頭に ^ を置くことが可搬性を損なうとは思えないのですが。
警告のメッセージを使って検索してみると、
http://japo.sourceforge.jp/trans/ja/sh-utils-2.0 …
などで
#: src/expr.c:439
#, c-format
msgid ""
"warning: unportable BRE: `%s': using `^' as the first character\n"
"of the basic regular expression is not portable; it is being ignored"
msgstr ""
"警告: 可搬でない BRE: `%s': 基本的な正規表現の最初の文字として\n"
"`^' を使うことは可搬ではないので無視します"
というのが見つかりますが、GNU の expr はこれに該当しませんし。
ところで「基本的な正規表現の」というのは誤訳ですね。
basic regular expression でひとつの単語ですので、ここでは「基本的な」
と訳してはいけません。
それともうひとつ。[] の中では . は\を前置する必要はないですよ。
, や_ は元からメタ文字ではないのでこれにも不要です。
- については微妙ですが、閉じのブラケットの直前に置けば\は不必要です。
sakusaker7さんご回答ありがとうございます。
[]の中では前置しなくていいんですね。了解しました。
「^」の件はよく分からないのであきらめます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java Java 南京錠 2 2023/02/04 11:46
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(Microsoft Office) (至急)Googleのスプレッドシートの条件付き書式について 2 2022/09/11 08:50
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現でシングルクォーテー...
-
PHPで変数から1行目だけを取得...
-
preg_match()の使い方
-
、"(ダブルクォーテーション)...
-
VBAを使ってHTMLソースから特定...
-
switchの大量分岐の高速化
-
PHPの正規表現で住所を分けるに...
-
mb_eregのブレースについて(住...
-
Excelで数字のみを2倍3倍にする...
-
preg_matchで Warning: Undefin...
-
PHPメールフォーム URLと半角...
-
VBAのコマンドボタンの文字列の...
-
文字の入力で横バー上段、中断...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
C++でのCRLFについて
-
全角英数文字が嫌われる理由を...
-
POSTで改行コードを受け渡すには
-
ソースコードの1行が長いとき...
-
C++で空Enterの入力を判...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
preg_matchでエラーが出ます。
-
VBAを使ってHTMLソースから特定...
-
Excelで数字のみを2倍3倍にする...
-
PHPで変数から1行目だけを取得...
-
正規表現でシングルクォーテー...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
住所から特定の文字列、数値を...
-
PHPで あるフォルダ内の、特定...
-
phpでhtmlソースを解析し、文字...
-
PHPで<a>タグ内からURLと文字を...
-
正規表現で特定のHTMLタグのク...
-
PHPの正規表現で住所を分けるに...
-
Smartyを使用した、テンプレー...
-
PHPによるIPアドレスマッチ
-
正規表現で、半角大文字と半角...
-
php 正規表現で(ただし○○は除...
-
PHPメールフォーム URLと半角...
-
「半角数字」と「+」を許可する...
-
preg_matchでのマッチが正しく...
おすすめ情報