シェルでの正規表現の詳細な分析

概要概要

  • 正規表現(正規表現)は、文字列操作の論理式であり、事前定義された特定の文字とこれらの特定の文字の組み合わせを使用して「正規文字列」を形成します。この「規則文字列」は、表現に使用されます。文字列の一種のフィルタリングロジック。
  • 正規表現は通常、文字列が特定の形式を満たしているかどうかを確認するために判断ステートメントで使用されます
  • 正規表現は、通常の文字とメタ文字で構成されます
    • 一般的な文字:大文字と小文字、数字、句読点、その他の記号を含む
    • メタ文字:正規表現で特別な意味を持つ特殊文字。ターゲットオブジェクトの先頭文字の出現モードを指定するために使用できます。
    • 主人公:メタ文字の前の文字
  • 。[] ^ $ 4文字はすべての言語でサポートされている正規表現であるため、これら4文字は基本的な正規表現です。同等性の概念があるため、規則性が理解しにくく、理解が非常に難しく、多くの初心者が混乱しているように見えます。同等性を元の文章に戻すと、自分で規則性を書くのは非常に簡単です。話すのが好きです。

基本的な正規表現の一般的なメタ文字

  • サポートされているツール:grep、egrep、sed、awk
メタ文字 説明
\ エスケープ文字
。\!、\ n、$などの特殊記号の意味をキャンセルするために使用されます。
^ 一致する文字列の開始位置。
例:^ a、^ the、^#、^ [az]
$ 一致する文字列の末尾の位置。
例:word $、^ $(空白行に一致)
\ n以外の任意の文字に一致します
例:ea.y、e ... y
* 前の部分式に0回以上一致し
ます。例:goo * d、go。* d
[リスト] リスト内の文字に一致します。
例:ea [sla] d、[abc]、[az]、[a-z0-9]、[0-9](任意の数字に一致)
[^リスト] リスト以外のリスト内の任意の文字に一致します。
例:[^ 0-9]、[^ A-Z0-9]、[^ az](小文字以外の文字に一致)
\ {n \} 前の部分式にn回一致します。
例:go \ {2 \} d、 '[0-9] \ {2 \}'(2桁に一致)
\ {n、\} 前の部分式にn回以上一致します。
例:go \ {2、\} d、 '[0-9] \ {2、\}'(2桁以上に一致)
\ {n、m \} 前の部分式をnからm回一致させます。
例:go \ {2,3} d、 '[0-9] \ {2,3 \}'(2から3桁に一致)
注意 {}には他の関数があるため、ほとんどのツールでは、特別な意味をキャンセルするためにエスケープ文字を追加する必要があります
。egrepとawkが{n}、{n、}、{n、m}を使用して一致する場合、「{}」の前に追加 "\"

拡張正規表現メタ文字

  • サポートされているツール:egrep、awk
メタ文字 説明
+ 前の部分式に複数回
一致します。例:go + d(god、good、gooodなどの少なくとも1つのoに一致します)
前の部分式に0回または1回
一致します。例:go?d(gdまたはgodに一致)
() 角かっこ内の文字列は全体として、+、?と組み合わせることができます。、*
例を使用します:g(oo)+ d(oo全体を複数回一致させます(good、goooodなど))。
| または方法で文字列に一致します。
例:g(oo | la)d(goodまたはgladに一致します)

正規表現構文のサポート

コマンドまたは環境 [] ^ $ \(\) \ {\} + | ()
私達 待機する 待機する 待機する 待機する 待機する
Visual C ++ 待機する 待機する 待機する 待機する 待機する
awk 待機する 待機する 待機する 待機する Awkはこの文法をサポートしています。コマンドラインに--posixまたは--re-intervalパラメーターを追加するだけです。manawkの間隔式を参照してください。 待機する 待機する 待機する 待機する
そして 待機する 待機する 待機する 待機する 待機する 待機する
デルフィ 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する
Python 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する
java 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する 待機する
javascript 支持 支持 支持 支持 支持 支持 支持 支持 支持
php 支持 支持 支持 支持 支持
perl 支持 支持 支持 支持 支持 支持 支持 支持 支持
c# 支持 支持 支持 支持 支持 支持 支持 支持 支持 支持

匹配手机号

  • 完整的匹配出13和15开头且共11位的手机号,非11位的都不讲匹配出
[root@localhost ~]# egrep "^(13|15)[0-9][ ]?[0-9]{4}[ ]?[0-9]{4}$" 8.txt
13133366888
157 1519 2901
[root@localhost ~]# vim 8.txt
1333333333#
155.5533385
18888888888
123456789?1
13133366888
123456789
88888787
157 1519 2901
1311885578
1567890
151234567890
13141516171819

匹配邮箱

  • 匹配出满足格式要求的@sohu.com、@qq.com、@163.com、@wo.cn、@sina.com.cn的邮箱
  • 邮箱格式:用户名以字母开头,中间可用最多2种符号 - 或 . ,不能使用符号结尾,用户名长度为最少6个字符
[root@localhost ~]# egrep "^[a-zA-Z][a-zA-Z0-9\.\-]{4,}[a-zA-Z0-9]@([a-zA-Z0-9_\-\.]+)\.([A-Za-z]{2,5})$" email.txt 
【用户名:因为-.有连续和任意字符的意义,所以加上转义符\来表示。因为最少6位,所以中间用{
    
    4,}代表至少4位以上的字符
 子域名:可以包含大写A-Z,小写a-z,数字0-9,符号“-”和“.”且一次以上
.顶级域:因为以.开头所以用转义符\.表示,且包含大写A-Z,小写a-z,且25位,并用$来表示结尾】

qwrqwrg@sohu.com
qfgqwg.gqt-gewg@qq.com
WQ.QR1131@sina.com.cn
wer123@sina.com
[root@localhost ~]# vim email.txt
qwrqwrg@sohu.com
qfgqwg.gqt-gewg@qq.com
qe88@163.com
QFQW SFG@wo.cn
WQ.QR1131@sina.com.cn
qwrqwr@sina.123
123wer$sina.com
wer123@sina.com

おすすめ

転載: blog.csdn.net/TaKe___Easy/article/details/114753552