はじめに Goの正規表現は遅いと言われていることが以前から疑問だったので調査してみました。 こちらの記事やこちらの記事を拝見する限り ① 現実的なユースケース(例えばURLのパースなど)ではGo言語の正規表現は使うべきではなく、stringsパッケージの標準の関数を利用した方がパフォーマンスとしては良い。 ② Go言語で正規表現を利用するために必要な"正規表現オブジェクト"を並行にアクセスするにはパフォーマンスが問題になるので注意が必要。 とあります。その理由は、それぞれ以下に集約できるようです。 ① Go言語標準の正規表現ライブラリは、正規表現と検査文字列の長さに対して常に$O(n^2)$のオーダーで計算量が増加する安定したアルゴリズムを採用している。 ② "正規表現オブジェクト"を用いたマッチング処理には排他制御が行われている。 調べてみる Go言語のpkg/regexpの公式ドキュメ
var ss= "<pre>aaaa\nbbb\nccc</pre>ddd"; var arr= ss.match( /<pre.*?<\/pre>/gm ); alert(arr); // null I'd want the PRE block be picked up, even though it spans over newline characters. I thought the 'm' flag does it. Does not. Found the answer here before posting. SInce I thought I knew JavaScript (read three books, worked hours) and there wasn't an existing solution at SO, I'll dare to post anyway
[edit] 要約 正規表現のクラス。正規表現のリテラルはスラッシュで囲んだ形式で記述します。 /^this is regexp/ Regexp.new(string) を使って正規表現オブジェクトを動的に生成することもできます。 str = "this is regexp" rp1 = Regexp.new("^this is regexp") p rp1 =~ str # => 0 p Regexp.last_match[0] # => "this is regexp" Ruby 3.0.0 から正規表現リテラルは freeze されるようになりました。 p /abc/.frozen? # => true p /a#{42}bc/.frozen? # => true p Regexp.new('abc').frozen? # => false 正規表現 や リテラル/正規表現リテラル
str 正規表現の照合を実施する文字列。すべての値は文字列に強制されますので、省略したり undefined を渡したりすると exec() は文字列 "undefined" を検索するようになりますが、これは望むところではないでしょう。 照合に失敗した場合は、 exec() メソッドは null を返し、 lastIndex を 0 に設定します。 照合に成功した場合、 exec() メソッドは配列を返し、正規表現オブジェクトの lastIndex プロパティを更新します。返された配列は、一致したテキストを最初の項目として持ち、その後、一致したテキストの括弧によるキャプチャグループに対して 1 つずつの項目を持ちます。 index 文字列中で一致した位置の 0 から始まるインデックスです。 input 照合対象であった元の文字列です。 groups 名前付きキャプチャグループを示す nu
型:Array、null もしマッチに成功すれば、execメソッドは配列を返し、正規表現オブジェクトのプロパティを更新します。 返された配列は、1つ目の要素にマッチしたテキストを持ち、 それ以降の各要素は、括弧指定にそれぞれマッチしたテキストが含まれます。 もしマッチするものが無ければ、execメソッドはnullを返します。 例 下記のスクリプトと表を例に、具体的に説明します。 //・1文字の"d"に続く1つ以上の"b"と、更にそれに続く1文字の"d"にマッチ //・マッチした1つまたは複数の"b"とそれに続く"d"を記憶 //・大文字小文字を無視 var re = /d(b+)(d)/ig; var result = re.exec("cdbBdbsbz"); 下記のテーブルは、このスクリプトの結果になります。 オブジェクト プロパティ インデックス 説明 例
str The string against which to match the regular expression. All values are coerced to strings, so omitting it or passing undefined causes exec() to search for the string "undefined", which is rarely what you want. If the match fails, the exec() method returns null, and sets the regex's lastIndex to 0. If the match succeeds, the exec() method returns an array and updates the lastIndex property of
標準組み込みオブジェクトRegExpコンストラクターRegExp() コンストラクター静的プロパティRegExp[@@species]RegExp.input ($_) 非推奨 RegExp.lastMatch ($&) 非推奨 RegExp.lastParen ($+) 非推奨 RegExp.leftContext ($`) 非推奨 RegExp.$1, …, RegExp.$9 非推奨 RegExp.rightContext ($') 非推奨 インスタンスメソッドRegExp.prototype[@@match]()RegExp.prototype[@@matchAll]()RegExp.prototype[@@replace]()RegExp.prototype[@@search]()RegExp.prototype[@@split]()RegExp.prototype.compil
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く