ATOMの正規表現で、行末、行頭に何かを加える

ATOM正規表現リプレースは挙動がおかしいので注意。

一番多く使われると思われる正規表現で、行末、行頭に何かを加えるというのが出来ない。
理由は1文字でもマッチしないと動作しないから。

1文字マッチさせてやればいいが、この場合空行は対象に含まれないので注意
肯定先読みや、肯定後読みする場合でも、それ以外の部分で1文字でもマッチしないと対象外になる

さらに、シングルクォート『'』、ダブルクォート『"』、行『;』の中身だけ、正規表現マッチ出来て
スマートだぜという機能のせいで、行末に『;』があったり、シングルクォート『'』、ダブルクォート『"』の中だったりすると正常に動作しない。
余計なことすんなマジで。

  • 行頭に『'』を追加
    • 正規表現 『^』、置換文字列『'』×
    • 正規表現 『^(.)』、置換文字列『'$1』〇
    • 正規表現 『^([\s\S])』、置換文字列『'$1』〇 ※ 空行もマッチ
  • 行末に『',』を追加
    • 正規表現 『^』、置換文字列『'』×
    • 正規表現 『(.)$』、置換文字列『$1',』〇
    • マッチ 『\n』、置換文字列『\n,』〇 ※ 空行もマッチ

いつも使う正規表現のチェックサイト

調べたいことが、すぐ見つけられなくなった今日この頃。
google先生は、10年前のgooと同じくらい検索精度が下がっていて使えない。。

本題ですが、qiitaの記事が邪魔をして、いつも使っている正規表現のチェックサイト
がぐぐってもなかなか辿れないのでメモ

MySQLでSQLだけでガチャ

SET @sql:= (SELECT CONCAT('
SELECT 
  item,
  rate,
  sum_rate,
  rnd 
FROM (
  SELECT
   gacha_id,
   elt(n,',group_concat(CASE WHEN type=1 THEN col ELSE '' END SEPARATOR ''),') item, 
   @rate:=elt(n,',group_concat(CASE WHEN type=2 THEN col ELSE '' END SEPARATOR ''),') rate,
   @sum_rate:=@sum_rate+@rate sum_rate,
   rnd 
  FROM
    gacha,
    (',group_concat(CASE WHEN type=1 THEN vt ELSE '' END SEPARATOR ''),') as t,
    (SELECT @rate:=0,@sum_rate:=0,FLOOR(rand()*100) rnd) as v
  WHERE
    gacha_id = 1
  ) t2
WHERE 
  sum_rate > rnd 
LIMIT 1 
') 
FROM (
  SELECT 
    group_concat(column_name  order by column_name SEPARATOR ',') col,
    CONCAT('SELECT ',group_concat(CONCAT(REPLACE(REPLACE(column_name,'item',''),'rate',''),' as n') order by column_name SEPARATOR ' UNION ALL SELECT ')) vt,
    case
      when column_name like 'item%' then 1
      when column_name like 'rate%' then 2
    end type 
  FROM 
    information_schema.columns 
  WHERE 
    table_schema = 'test' 
   AND 
    table_name = 'gacha' 
   AND 
    (
      column_name like 'item%'
     OR
      column_name like 'rate%'
    ) 
  GROUP BY 
    case
      when column_name like 'item%' then 1
      when column_name like 'rate%' then 2
    end
) t
); 
PREPARE dynamic_sql FROM @sql;
EXECUTE dynamic_sql;