質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

5回答

269閲覧

制限されたなかでの置換のやり方

aaaaaaaa

総合スコア501

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/01/22 10:15

正規表現を使って下記の文字たちを

// } // $ // w //

から

// //} // //$ // //w //

のように置換したいのです。ただ後読み(否定と工程)とパターン修飾子mを使わずに置換したいのです。
mを使えば、簡単にできますが、mと後読み無しで上記のように置換できるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

訂正前

「後読み」は使う機会がないように読めますが、否定先読みは使っていいのでしょうか。

(2018/01/23 22:00追記)
こちらは間違っていた為、修正案を後述しました。

JavaScript

1string.replace(/^(?!//)/mg, '//'); 2string.replace(/^(?://)?/mg, '//');

訂正後

後読みが使えないなら、キャプチャすれば良いと思います。

JavaScript

1string.replace(/(^|\r\n|[\n\r])(?!//)/g, '$1//'); 2string.replace(/(^|\r\n|[\n\r])(?://)?/g, '$1//');

Re: aaaaaaaa さん

投稿2018/01/23 05:49

編集2018/01/23 13:02
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/01/23 05:54

マルチラインはNGみたいですよ。 (理由はわかりませんが)
think49

2018/01/23 09:28

To: yambejp さん 補足ありがとうございます。マルチライン禁止のルールを見逃していました。 細い回線では記事編集が機能しないので、コメントに追記します。 ```JavaScript string.replace(/(^|\r\n|[\n\r])(?!//)/g, '$1//'); string.replace(/(^|\r\n|[\n\r])(?://)?/g, '$1//'); ``` 後読みが使えないなら、キャプチャすれば良いと思います。
think49

2018/01/23 13:03

親記事に追記しました。
guest

0

bash

1echo -e '//\n}\n//\n$\n//\nw\n//' | sed -e 'N' -e 's#//\n#//#'

あまりにも手抜きな方法ですね、、。

投稿2018/01/22 12:43

編集2018/01/22 12:49
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

先読み言明は使っていいんですね?

perl

1 2$a=<<'EOD'; 3// 4} 5// 6$ 7// 8w 9// 10EOD 11 12# before 13print("$a\n"); 14 15# substitution 16$a=~s{\n(?!//)(?!$)} 17 {\n//}g; 18 19# after 20print("$a\n"); 21

投稿2018/01/22 11:22

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

m修飾子というのであればPHPでしょうか?

PHP

1$str=<<<eof 2// 3} 4// 5$ 6// 7// 8w 9// 10eof; 11$pattern="@(//)\r\n@"; 12$replacement="$1"; 13$str=preg_replace($pattern,$replacement,$str); 14 15print nl2br($str);

「//」行のあとに「//」が来た場合どうしたいかによります

投稿2018/01/23 01:25

yambejp

総合スコア114757

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaaaa

2018/01/23 10:32 編集

ご回答ありがとうございます。 なるほど、置換で//と改行をなくしてから、グループで//を復活させるわけですね。 >>二行続けてダブスラが来たときは、下記のようにすると (//)\r\n(?=[^/]) で //} //$ // //w // と,なりました。 重ね重ね申し分かりませんが、(//)\r\nや(//)\r\n(?=[^/])を http://www.phpliveregex.com/ のような正規表現チェッカー(preg_replace)で試してみても上手く動作しません。ローカルホストで試したときは両方とも上手く動作したのですが、なぜこのチェッカーはローカルホストのように動かないのでしょうか。
yambejp

2018/01/23 10:39

きちんとやるなら @(//)(\r\n|\r|\n)@ 「//」のあとの改行マークを一つだけ引っ張ります @(//)(\r\n|\r|\n)(?!//)@ とすると「//」が連続している行は無視します
guest

0

PowerShell

PowerShell

1$a = "// 2} 3// 4$ 5// 6w 7//" 8[System.Text.RegularExpressions.Regex]::Replace($a, "^[^/]", "//`$0", "Multiline")

結果

// //} // //$ // //w //

m ではなく Multiline です。
修飾子ではなくオプションです。

投稿2018/01/22 11:41

編集2018/01/22 11:46
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問