タグ

正規表現に関するhirono_hidekiのブックマーク (3)

  • [正規表現] .*?は最短マッチではない - Qiita

    # Ruby 2.4.2 "<<<hoge>>>".match(/<.*?>/)[0] #=> "<<<hoge>" なぜこうなるのか .*?は、 最短マッチ 最左マッチ の2つの原則に従い、しかも最左マッチの原則の方が優先順位としては高いからである。 より嚙み砕いて言うと <.*?>は先頭の<がマッチした後に、そこからマッチする部分をできるだけ最小化しようと試みる。 <<<hoge>>>に対して<.*?>をパターンマッチさせる際に行われる実際の処理の流れは、次のようなイメージになるだろう。 < # <までマッチ << # <>のマッチに失敗、.の数を増やしてリトライ << # <.までマッチ <<< # <.>のマッチに失敗、.の数を増やしてリトライ <<< # <..までマッチ <<<h # <..>のマッチに失敗、.の数を増やしてリトライ <<<h # <...までマッチ <<<ho

    [正規表現] .*?は最短マッチではない - Qiita
  • #085 正規表現の落とし穴

    1999/10/13 <前|目次|次> 馴れてくれば便利に使える正規表現であるが、複雑で曖昧な表現を一行で表わそうというものであるから、そこにはいくつかの落とし穴が存在する。あまり触れられない事項であるのでそれをまとめておく。 ・シェルの変数展開(ワイルドカード)とは違う UNIX系のOSが持っている機能である、ファイル名の展開機能において用いられるワイルドカードでは、似たような記号を使うが、正規表現とは別ものである。ワイルドカードでは、文字クラスの [ ]や[^ ] は正規表現と同様の使われ方をするものの、「?」は任意の一文字、「*」は任意の長さの文字列を表す。ワイルドカードは、ファイル名の指定を容易にするものであり、その表現力は正規表現よりも低い。 ・マルチバイト対応か ツール自体が漢字、すなわちマルチバイト文字に対応していないと、「.」が1バイト分しか対応しないなど、意図した結果にな

  • 【 文字列を置換する「sed」 】 - シェル・スクリプト・リファレンス:ITpro

    文字列の一部を置き換えたい場合はsedを利用する。sedは文字列を置換したり,特定の行を抜き出したりできる。sedは,

    【 文字列を置換する「sed」 】 - シェル・スクリプト・リファレンス:ITpro
  • 1