これは愚かな要求のように思えるかもしれませんが、私はとにかく尋ねるつもりです。私は数字のリスト内のすべてのn番目のコンマを見つけるために、正規表現を使用したい正規表現n番目の一致
は、IE:
88574,93243,129659,135504,136357,141052,141619,141619,142195,144622,144946,...
し、「\ rを\ n」は、それによって回すことによって置き換えられて4回ごとにカンマを「」持つことができます4行×n行のグリッドへの数値のリスト。すべてのコンマを見つけ
は簡単だった:上記のリストからすべてのカンマを検索します
[^0-9]
。どのようにしてこれらのマッチをグループ化して、4つおきに3つを除外することができますか?
私はこれをPHP preg_matchesで行うことができましたが、これをmysqlの正規表現置換関数で使用していますので、純粋な正規表現の回答があればそれが望ましいでしょう。
私は、MySQLで使用している機能は以下の通りです:
DROP FUNCTION IF EXISTS `regex_replace`$$
CREATE DEFINER=`root`@`127.0.0.1`
FUNCTION `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original TEXT)
RETURNS VARCHAR(1000) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE temp VARCHAR(1000);
DECLARE ch VARCHAR(1);
DECLARE i INT;
SET i = 1;
SET temp = '';
IF original REGEXP pattern THEN
loop_label: LOOP
IF i>CHAR_LENGTH(original) THEN
LEAVE loop_label;
END IF;
SET ch = SUBSTRING(original,i,1);
IF NOT ch REGEXP pattern THEN
SET temp = CONCAT(temp,ch);
ELSE
SET temp = CONCAT(temp,replacement);
END IF;
SET i=i+1;
END LOOP;
END IF;
RETURN temp;
END$$
あなたはそれが自己複雑なマッチングを処理する必要がないのです正規表現を見ることができるように。したがって、n番目のカンマを選択できる正規表現で十分です。
これで問題がはっきりわかることを願っています。
フィン
編集:私はにpreg_replace機能が含まれている奉仕にlib_mysqludf_pregライブラリを追加した
。これはMySQL用のPCRE実装であり、4分の1を選択する正規表現の問題に答えることができ、 '、\ r \ n'で置き換えることができます。
([0-9] * [^ 0-9]){4} –
ありがとうございましたJamesさん、 以下のTimと非常によく似た回答です。彼への反応と更新された質問をご覧ください。 ありがとう、 フィン – Fin
私はMySQLを使っていませんが、編集権を読んでいれば、今は 'preg_replace'にアクセスできるようになりますので、@ Timの解決策は実行可能でなければなりません。 –