質問
あらりうるえれおろかやゆよかまみきむめもく
という文字列を
あ+う○え*お+か+き+く
というマルチバイト正規表現もどきを元に
あ<span class='blue'>らり</span>う<span class='red'>る</span>え<span class='green'>れ</span>お<span class='blue'>ろかやゆよ</span>か<span class='blue'>まみ</span>き<span class='blue'>むめも</span>く
という文字列に変換するエレガントもしくはシンプルな方法を教えて下さい。
詳細
マルチバイト正規表現もどきの説明です。
「○」と「*」は1文字を表しますが、「○」は1度だけ出てくるのに対し、「*」は0回以上出てきます。「+」は1文字以上の文字列を表します。0回以上出てきます。
「○」にヒットしたキーワードは赤、「*」にヒットしたキーワードは緑、「+」にヒットしたキーワードは青に表示させたいので、上記のspan
タグのいっぱい入った文字列を作りたいのです。
やってみた事
自分なりに書いたコードです。
php
1<style> 2.red { 3 color: #f00; 4 } 5 .green { 6 color: #0c0; 7 } 8 .blue { 9 color: #00f; 10 } 11</style> 12<?php 13 14$mb_pattern = "あ+う○え*お+*か+き+く"; 15 16$pattern = "/"; 17$j = 1; 18 19for ($i = 0; $i < mb_strlen($mb_pattern); $i++) { 20 $mb_char = mb_substr($mb_pattern, $i, 1); 21 switch ($mb_char) { 22 case '○': 23 $pattern .= "(.)"; 24 $replacement .= "<span class='red'>$" . $j++ . "</span>"; 25 break; 26 case '*': 27 $pattern .= "(.)"; 28 $replacement .= "<span class='green'>$" . $j++ . "</span>"; 29 break; 30 case '+': 31 $pattern .= "(.+)"; 32 $replacement .= "<span class='blue'>$" . $j++ . "</span>"; 33 break; 34 default: 35 $pattern .= "(${mb_char})"; 36 $replacement .= "$" . $j++; 37 break; 38 } 39} 40 41$pattern .= "/u"; 42 43echo $pattern; 44// /(あ)(.+)(う)(.)(え)(.)(お)(.+)(.)(か)(.+)(き)(.+)(く)/u 45 46echo "<br>"; 47echo htmlentities($replacement); 48// $1<span class='blue'>$2</span>$3<span class='red'>$4</span>$5<span class='green'>$6</span>$7<span class='blue'>$8</span><span class='green'>$9</span>$10<span class='blue'>$11</span>$12<span class='blue'>$13</span>$14 49 50echo "<br>"; 51 52$string = "あらりうるえれおろかやゆよかまみきむめもく"; 53 54echo preg_replace($pattern, $replacement, $string); 55echo "<br><br>"; 56echo htmlentities(preg_replace($pattern, $replacement, $string)); 57// あ<span class='blue'>らり</span>う<span class='red'>る</span>え<span class='green'>れ</span>お<span class='blue'>ろかやゆ</span><span class='green'>よ</span>か<span class='blue'>まみ</span>き<span class='blue'>むめも</span>く
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。