X



正規表現道場 Part2
0001nobodyさん垢版2012/09/19(水) 18:58:43.51ID:bdgNsY2f
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

前スレ
正規表現道場
http://kohada.2ch.net/test/read.cgi/php/1168450843/
0316nobodyさん垢版2018/07/02(月) 19:01:01.37ID:???
教えてください
日付を処理するにあたり
2018-07-09 もしくは 7-9-18
のどちらがきても$1月$2日を7月9日にしたいと思っています。年は不要。

(?:20[12][0-9]-0?)?(1?[0-9])-0?([123]?[0-9])(?:-[12][0-9])?
で一応うごいてるのですが、もっとスマートにできますでしょうか?
0317nobodyさん垢版2018/07/04(水) 17:45:24.74ID:???
PHPで一番最後のカギカッコとその先を消したい時

$text = 'あいうえお「かきくけこ」「さしすせそ」たちつてと';
   ↓
$text = 'あいうえお「かきくけこ」';

$text = preg_replace("/「[^「」]*」.*/","",$text);
では元の文字列のまま返されます。
しかし、さしすせそ の部分を sasisuseso にすると成功します。何が問題なのでしょうか?
0318nobodyさん垢版2018/07/04(水) 18:51:15.18ID:???
>>316
そもそも処理自体が正規表現に向いてないと思うんですけど

>>317
それ全然ダメでしょ
*はgreedyだから最初にマッチした括弧以降全部食う
あとPHPならuオプション使うべき

/(「[^「」]*」)(?:(?!(?1)).)*$/
https://regex101.com/r/AKpqav/2

何か正規表現でももっと賢い方法ありそうだけど思い浮かばなかった
0319nobodyさん垢版2018/07/05(木) 13:28:53.77ID:???
>>318
ありがとうございます。半分くらいしか分かりませんがうまくいきました。

$text = preg_replace("/(「[^「」]*」)(?:(?!(?1)).)*$/su","",$text);
0321nobodyさん垢版2018/07/08(日) 09:24:45.77ID:???
txtファイルで20文字目で改行したいのです。
20文字目で改行コードを挿入すればいいのかなと思ったのですが、
書き方がわかりません。
よろしければどなたか教えてください。
0323321垢版2018/07/08(日) 10:40:14.52ID:???
>>322
レスありがとうございます。
説明が足りず申し訳ありません。
例えばなんですが、秀丸エディタのような正規表現の置換に対応したテキストエディタで
<置換前>
あいうえおかきくけこさしすせそ
たちつてとなにぬねのはひふへほ
<置換後>
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
これは5文字目で改行させた場合の例ですが、これを20文字目で改行させたいということなんです。
で、<置換前><置換後>に正規表現でどのように書けばいいのかということなんですが、いかがでしょう?
0324nobodyさん垢版2018/07/08(日) 10:51:45.42ID:???
>>323
秀丸 タグ付き正規表現
で検索するといいかも?
0325321垢版2018/07/08(日) 11:37:21.89ID:???
>>324
検索してみたら、そのものずばりがありました。
【秀丸エディタ】正規表現を用いて指定文字数で改行させる方法
https://nodoame.net/archives/4675
どうもありがとうございました。
0328nobodyさん垢版2018/09/30(日) 10:50:04.80ID:???
IllustratorCS以降のスクリプトで縦中横を正規表現でしたいのですが
ググっても見つからないので自作しようと

縦書きテキストの縦中横を自動処理
var matchStr = /[0-9]/ ;  //これをベースに↓
htt p://d-p.2-d.jp/ai-js/pages/01_scripts/text/index.html#14_text_vertical_folder
これだと半角1文字か2文字の数値のみで 小数点が間にあると1文字ずつバラバラに適用されてしまいます

半角数字2〜3文字(以上) かつ 途中に小数点ピリオド有無 を縦中横に
半角欧数字が1文字の場合は 全角に
したいです JavaScript
0329nobodyさん垢版2018/09/30(日) 10:53:25.45ID:???
数字とドットを判別する正規表現
^[1-9][0-9]+$|^[1-9][0-9]+\.?[0-9]+$
htt p://lma ker.blo g17.f c 2.com/blo g-en try-169.html
これだとうまく走りません
先頭数字が0でもかまわないので
^[0-9][0-9]+$|^[0-9][0-9]+\.?[0-9]+$   //や
^[0-9]+$|^[0-9]+\.?[0-9]+$       //を試してみましたが 駄目でした

NGワードtest回避
0330nobodyさん垢版2018/09/30(日) 11:07:07.10ID:???
頭にマイナス文字が来るのを忘れていました
0331nobodyさん垢版2018/09/30(日) 16:42:39.78ID:???
URLは見せたいのか伏せたいのかどっちやねん
0332nobodyさん垢版2018/09/30(日) 16:47:40.24ID:???
URLは5chのNGワードにひっかかってるみたいで
すみません
0333nobodyさん垢版2018/09/30(日) 19:23:05.09ID:???
直接の答えじゃなくてすまんけど。

正規表現で^は行の先頭を意味するけど、それは意図とあってる?
縦書きに紛れる数字って行の先頭とは限らないんじゃないかな。
0334nobodyさん垢版2018/09/30(日) 19:28:31.97ID:???
一度に書けなくてすまん。
$も、あれは行末を意味するからそれも意図とあってるかな?

縦書きする日本語
数字部分
縦書きする日本語

という原稿なら俺のツッコミは余計なのでごめん。
逆に言うとそういう原稿じゃないと機能しないと思うよ。
0335nobodyさん垢版2018/09/30(日) 21:08:42.98ID:???
>>333
^が行の一番目から数字かどうかを見ていたから
$が行末を見ていたから
下のは走らなかったんですね

文中の数字なので、そのご指摘であってます
初歩的な内容ですみません
とりあえず頭と尻を取ってみてみます
こんな過疎なのにありがとうございます
0336nobodyさん垢版2018/09/30(日) 21:18:43.88ID:???
/[0-9]+$|^[1-9][0-9]+\.?[0-9]+/ ;  //では駄目でした……
練習テスト

328nobodyさん2018/09/30(日) 10:50:04.80ID:???

この文字列を
↓こうしたい ヒット希望する箇所=【 】

【328】nobodyさん【2018】/【09】/【30】(日) 【10】:【50】:【04.80】ID:???
0337nobodyさん垢版2018/09/30(日) 21:24:20.04ID:???
386 や 38.6 みたいな数字だけのも試しましたが
386 には無効で 38.6 は 38 と ピリオド と 6 とに分けられて効きました

正規表現よりスクリプトの中身の処理なのかもしれません
う〜ん
0338nobodyさん垢版2018/09/30(日) 22:48:44.95ID:???
いま手元に試せる環境ないけど、でもまだ環境を疑う前の状態、正規表現が完成してない状態だと思う。余裕あったら336の最後、試してみるね。
0340nobodyさん垢版2018/10/01(月) 08:40:14.19ID:???
>>339
>>328>>330 の画像のように
必ず3桁とは限りませんですね
4桁以上のこともありますので
0342nobodyさん垢版2018/10/01(月) 11:05:20.10ID:???
>>341
プラスマイマスまで処理していただいて
ありがとうございます

システムのプログラムが本職ではないので
こういうのが苦手でした
正規表現処理としては合っているのですが
スクリプトは半角数字1〜2文字のみを処理するだけで
3桁数字もプラスもマイナスも小数点も駄目でした
本当にお手間をおかけしました
今回はあきらめてみます う〜ん……
0343nobodyさん垢版2018/10/18(木) 16:57:45.42ID:ks7bneBP
自分に対して「ガイジ」って言ってくる奴をNGみたいなの出来る?
0344nobodyさん垢版2018/10/18(木) 17:27:56.89ID:???
無理だと思う。どのレス番が自分なのか予め分かってる必要があるけどそれが難しいんじゃないかな。
0345nobodyさん垢版2018/10/19(金) 07:53:00.28ID:???
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
0346nobodyさん垢版2018/10/20(土) 10:38:55.21ID:Isa88TJv
perlをphp化しようとしています。
perlの$`や$'のようなマッチの前後の文字列を取り出すことはできますか?
また、tr/A-Z/A-Z/のような変換は、変換則をいちいち配列で指定しないとできないのでしょうか。
0347nobodyさん垢版2018/10/20(土) 12:59:24.05ID:???
>>346
後者は正規表現じゃなくてmb_convert_kanaじゃあかんの?
0348nobodyさん垢版2018/10/22(月) 04:46:36.26ID:F6qPDtGA
スレ内のランダムで3回以上繰り返される同一の文章をNGできますか?
0349nobodyさん垢版2018/10/22(月) 05:47:20.33ID:F6qPDtGA
細かく説明するとスクリプトコピペ荒らしのコピペ内容が一定期間で変わってしまうというので困っています

V2Cの正規表現で似たもの見つけましたが、janeでは使えませんでした。
(?:^|\n)(.{5,}\n(.*\n){0,2})\1{3}
0350nobodyさん垢版2018/10/22(月) 06:55:08.17ID:???
Janeはdatは取得したそのままで何も加工しないので
改行は\nではなくて<br>となる
また、各行の先頭と末尾に半角空白が付加されている
実際にレスがどうなっているのかはdatを覗いてみるのが一番
0351nobodyさん垢版2018/10/24(水) 08:06:13.02ID:???
JavaScriptで
<table class="aaa" border="1" xxx="yyy" ...(略)>
これを
.replace( /class="(S+)"/g, '.$1' )
で、
<table .aaa border="1" ....>
の形にすることができました。

今度は
<table class="aaa bbb ccc (略)" border="1" xxx="yyy" ...(略)>
これを、border以降を巻き込むことなく
<table .aaa .bbb .ccc (略) border="1" ...>
の形にしたいのですが、どうすればよいでしょうか…?
「=」を含まないようにすればいいんだとは思いますが、なんだかごちゃごちゃするばかりでうまくいきませんでした。
0352351垢版2018/10/25(木) 00:42:51.39ID:???
その後色々試して見た結果
replace( /class=["\s]((.+)+)"/g, '.$1' )
とすることで
<table .aaa bbb ccc (略) border="1" ...>
の形にすることができました。

しかし、.aaa .bbb .ccc のように繰り返して「.」を付加する方法がわかりません。
おとなしく2回に分けて置換するほかないのでしょうか?

replace( /class="(.+\s)?(.+)(\s.+)?"/g, '.$2' )
…これだと1回しか置換できませんね…
0353nobodyさん垢版2018/10/25(木) 14:19:15.03ID:???
すいません質問させてください
専ブラアプリのchmateで連続投稿、連レスをNGに出来ませんか?
連続でなくても、同一IDで沢山書き込んでいるのをNGにしたいのです
毎日NGIDとして登録すれば済む話しなんですが‥
正規表現で一定数以上の書き込みをNGにしたいのです
よろしくお願いします
0354nobodyさん垢版2018/10/30(火) 16:07:23.36ID:???
「あいう
えお」
『かきくけ
こ』

のような場合に改行を詰めたいのですが

^[」』](\r?\n)

を置換して消そうとしてもうまくいきませんでした
どうすれば詰めることができるでしょうか

(使用環境はAutoHotkeyです)
0355nobodyさん垢版2018/10/30(火) 16:53:51.94ID:???
>>354
違ってたらごめんだけど、^の後に何がきても的な指定が足りてないんちゃう?

行頭、ほにゃらら、」または』、改行

とするのがいいんじゃないかなぁと。
0356354垢版2018/10/30(火) 18:03:23.40ID:???
>>355
あ、^は行頭ではなく、[]内の否定でした…

」や』で終わってたらOK(置換しない)
」や』以外で終わってたら、改行コードを削除して詰める
という感じです

^(.+)[^」』]\r?\n

なんか違いますね…
試しにこれでやってみると

「あいう」
『えお』
「かきく
けこ」



「あいう」『えお』
「かきく
けこ」

になるので逆っぽい…
どうも[^]による否定ができていない気がします
一応、AutoHotKeyの正規表現でも[^]による否定はできるはずなんですけど
0358nobodyさん垢版2018/11/25(日) 15:27:10.04ID:TICRp/KJ
教えて下さい。
!と!に該当させたいけれど、!?と!?の場合は除外したい場合、
どのような正規表現になるでしょうか。
0363nobodyさん垢版2018/12/31(月) 08:50:07.88ID:???
アドレスを編集しているんですけど
:80だけ消してたとえば:8001,:6080とか
80が含まれる数字は残したいんですけどどうやればいいんでしょうか
さくらエディターつかってます
0364nobodyさん垢版2019/01/14(月) 16:34:17.89ID:???
PHPで改行以外の制御文字を空文字に置換したいと思い次のように書きました。

preg_replace( '/(?!\n)[\p{Cc}]/u' , '' , $ver );

この場合、否定先読みで\nを指定しているのですが、\rも指定した方が良いのでしょうか。
詳しい方、アドバイスをください。
よろしくお願いします。
0365nobodyさん垢版2019/01/27(日) 18:09:07.98ID:???
そういえば\Rは\rや\nにマッチするって見かけたけど、間にある垂直タブや書式送りにもマッチするよな
0366nobodyさん垢版2019/03/24(日) 10:07:25.65ID:???
鬼太郎実況スレに現れる軍オタ荒しはどうNGすればいいんでしょうか

荒らす個々の文が違うのでやってもやっても消えません
0367nobodyさん垢版2019/07/07(日) 22:05:47.87ID:???
GreasemonkeyのスクリプトでニコニコのコメントをNGにするため
正規表現がうまく適用できなくて

任意の文字列が4字以上連続
.{4,}

スクリプトのほうの問題ならあきらめます
0369nobodyさん垢版2020/09/08(火) 14:42:32.02ID:???
「任意の一文字と複数のスペース」を3回以上繰り返す文に合致する正規表現

(.[[:blank:]]{2}){3}

で↓の文にヒットしてくれないんだけど理由分かる方いる?

や    め    ろ    ー    !    し    ゅ    ー    く    ん    の    が

画像のように他の文にはヒットしている
https://i.imgur.com/mMhnds9.jpg
0371nobodyさん垢版2020/09/11(金) 13:31:39.28ID:???
>>370
ありがとう
{2}を{2,}にしろってことだよね

上手く動きました!
0372nobodyさん垢版2020/10/04(日) 12:23:49.19ID:EyprqV7h
phpで掲示板を作っていてアンカーリンク作りたいと思い以下のように書きました

preg_replace("/>>([0-9]+)/","<a href=\"?res=\\1\"> >>\\1</a>",$text);
>>1など単発の場合は↑でできましたが、>>1,2,3や>>1,2,3,10-15とやりたい場合どうしたら良いですか?
0373nobodyさん垢版2020/11/12(木) 11:55:47.68ID:???
5ch閲覧にrep2を利用しています。
文末に「>>1」が入っているレスを正規表現を利用してあぼーんしようとしました。
rep2だと行末に半角スペースが入るために
>>1)\s$としたのですがうまくいきません。因みに「>>1」を他の日本語に変更すれば
期待通りの結果は得られるのですが。どの表に表現すれば良いのか教えて頂けないでしょうか。
0374373垢版2020/11/26(木) 00:00:02.41ID:???
上の質問をしたものです。
&gt;&gt;1<\/a>\s$ を半角で記述すれば目的を達成することができました。
お目汚し失礼しました。
0375nobodyさん垢版2021/06/01(火) 18:25:38.30ID:???
chmateのNG設定で

複数のワードを全て含む書き込みをNG (?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3))

の ?s:^ と?=はどういう意味ですか?
0376nobodyさん垢版2021/10/20(水) 09:13:32.70ID:???
>>375
超いまさらだけど一応

?s:^は文章全体から検索するよって意味

?=は、ワードを含む(検索する時にマッチする)って意味

(?=あいう)だったら「あいう」があるレスがマッチする
0377nobodyさん垢版2021/11/03(水) 20:06:54.60ID:???
# h1
## h2

これにマッチする正規表現はどう書けばいいんでしょうか?
# h1にマッチさせたい場合、以下のようにしましたが、h2にもマッチします

# .*

h1のみ、h2のみにマッチさせる書き方はどうしたらいいのでしょうか
0379nobodyさん垢版2021/11/18(木) 22:44:23.00ID:LOXmgaYk
お.んこ
0380nobodyさん垢版2021/12/21(火) 17:54:59.04ID:ha2uCzxO
PLAN
PLAN2
PLAN3
PLAN4

以上の4つを表す正規表現についてですが

^PLA(N|N[2-4])

で合ってますか?
0381nobodyさん垢版2021/12/21(火) 19:18:54.23ID:???
>>380
合ってるけど
^PLAN[2-4]?
でいいんじゃないか
0382nobodyさん垢版2021/12/21(火) 19:21:03.74ID:???
ところで、後ろはどうするんだ
PLAN5
とかでもPLANにマッチするけどいいのか
0383nobodyさん垢版2022/04/20(水) 03:42:46.79ID:???
スマホのブラウザ(Berry browser)での検索結果にでたYouTubeのリンクを
NEWPIPEで開くようにする正規表現をおしえていただけませんか?
0384nobodyさん垢版2022/08/03(水) 23:16:32.32ID:1IP0HnLs
正規表現ってこういうのも出来ますか?

  あ い う え お

が「順不同」で「全て含まれている」のを検出

(1) ヒット例
ーーーーあいうえおーーーー
ーおーえーうーいーあーー
ーーーおあーーいいええーーう

(2) スルー例
ーあいうえーーーーー
ーおういあーーーーー

みたいなの1行の正規表現出来ますか?
0386nobodyさん垢版2022/08/04(木) 01:48:18.36ID:1CNBnxTN
>>385
やり方教えて!
0387nobodyさん垢版2022/08/04(木) 14:27:12.75ID:???
複数文字列のANDの基本
^(?=.*文字列1)(?=.*文字列2)(?=.*文字列3)・・・
0388nobodyさん垢版2022/08/04(木) 16:32:56.29ID:1CNBnxTN
これで行けました >>375
ありがとうございます
0389nobodyさん垢版2023/01/08(日) 22:01:02.48ID:???
^.{0,20}$
20文字以下の短文をNGにしたいんですけどアンカーが付いてるとスルーされてしまいます
どうやって改善したら良いですか?
0390nobodyさん垢版2023/07/06(木) 23:30:11.65ID:???
5ちゃんのスレでid無しだけを表示したいのですが
0391nobodyさん垢版2023/10/27(金) 13:16:07.99ID:???
基礎的なことですみません、一応調べてはみたのですが
JavaScriptで改行コードを消す場合

str.replace(/\r\n|\n|\r/g, '')

は理解できますが

str.replace(/[\r\n]/g, '')

ではだめでしょうか?
0392nobodyさん垢版2023/10/29(日) 19:52:21.37ID:CfvUCDSw
age
0393nobodyさん垢版2023/11/24(金) 17:30:39.48ID:???
ChMateのNG機能で、レス本文に順不同で含まれる "あ" に5回マッチさせる際の書き方を教えていただきたいのです

こんな↓感じの毎回微妙に違う意味のないレスをポイしたいのです
うあいうえああえあかあたま
レスを投稿する


ニューススポーツなんでも実況