全角と半角がまじりあうと…
文字列
aqwaaaaaaaああああa aqwaaaaaa646aaaaaaaaaa aqwaaaaaaaa655abaaaaaaaaaaaa aqwaaaaaa
という文章の先頭部分にコメントアウトを意味する「//」を挿入する際(つまり各行のaqwaa...を//aqwaa...のようにしたい)
\b(\w{0,1}|\W)\b(?=\w+)
置換
//
ほしい結果
//aqwaaaaaaaああああa //aqwaaaaaa646aaaaaaaaaa //aqwaaaaaaaa655abaaaaaaaaaaaa //aqwaaaaaa
実際の結果
//aqwaaaaaaaああああ//a //aqwaaaaaa646aaaaaaaaaa //aqwaaaaaaaa655//abaaaaaaaaaaaa //aqwaaaaaa
置換することで各行の先頭に「//」を入れようとしたのですが、二か所だけ「//」を挿入したくないのにも関わらず、入ってしまう所があります。
その部分の特徴は、全角と半角がいりまじった部分で、「...ああa」と「...655aba...」です。
どうすると、全角と半角が入り混じった部分が反応しなくなり、ほしい結果のようになりますか。
\bを消すと何故
また、単語境界\bを下記のように一つに減らすと、
\b(\w{0,1}|\W)(?=\w+)/
置換
$1//
置換で$1を追加しなければ、正規表現チェッカーでは、先頭の「a」と全角の「55」のあとにある「a」がもっていかれるます。
ところで、なぜ単語境界を一つ減らしたことでこのような差が生まれたのでしょうか。
単語境界が、最初の\bから、次に来る\bまでが一つの連なった単語として認識してくれる、つまり\bxyz\b
なら最初がx、次がy、次がzの言葉ならマッチするという意味であると認識しております。
しかし、なぜこのような差がでたのか上手く説明できません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/05 10:41
2017/04/05 11:47 編集
2017/04/06 10:14