[過去ログ] Regular Expression(正規表現) Part12 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
772(1): 758 2014/08/24(日)18:09 ID:/K2tiopt(1) AAS
>>764
2回に分けてやる方法が分かったよ。参考情報ありがと。
1回目
,(\d{1,3}), → ,目印000\1目印,
2回目
,目印0*(\d{4})目印, → ,\1,
773(1): 2014/08/24(日)18:32 ID:7kdxEP/H(1) AAS
マクロをシンプルにするために正規表現をゴチャゴチャにしたら本待つ転倒じゃね。
マクロのほうがシンプルで読みやすいものになるだろうに。
774: 2014/08/25(月)00:46 ID:xXZcDf8b(1/3) AAS
>>773
テキストエディタ上で桁揃えするときに>>772みたいな置換するのは定番だろ。
こんなん使い捨ての手打ち表現としてすら複雑とは言わないと思うんだが…
775(1): 2014/08/25(月)01:05 ID:MGBbV6rC(1/2) AAS
そんな面倒なことするくらいなら表計算ソフト使ったほうがいい。
プログラミング出来る人ならコマンドラインからprintfで。
776(3): 2014/08/25(月)01:20 ID:DzYgYr7E(1) AAS
正規表現の結果にprintfみたいな書式で置換できたらいいのにね
777: 2014/08/25(月)01:55 ID:xXZcDf8b(2/3) AAS
>>775
表計算ソフトに取り込むのに正規表現で書式直したりする場合もあるんだが…
つかこの程度の正規表現を複雑とか面倒とか思う奴がなんでこのスレにいるの?
>>776
printfが便利すぎてstreamに移行できない…ってのは兎も角、
そういうこと考えてくとJavaScriptのreplaceみたいなの使いたくなる。
778: 2014/08/25(月)02:43 ID:gEXAbfJD(1) AAS
>>776
ちょっと頑張れば出来るよ
779: 2014/08/25(月)02:47 ID:uDmHN95M(1) AAS
JavaScriptだとマッチ部分の再利用まんどいからな
なぜわざわざ関数にせにゃあならんのか
780(1): 2014/08/25(月)02:50 ID:MGBbV6rC(2/2) AAS
表計算ソフトなら貼り付けて書式を変更するだけで出来るんだけどね。
馬鹿とハサミは使いよう。
781: 2014/08/25(月)05:45 ID:NQvVGwkw(1) AAS
>>780
お前がプログラマでないことはよくわかった。
782(1): 2014/08/25(月)07:04 ID:f/anSDMw(1) AAS
>>776
まともなエディタならできるよ
783(2): 2014/08/25(月)14:59 ID:LYmloza8(1/4) AAS
phpの文字置換で質問です
【目的】 文字列内の ab を a にする ただしabの後ろがcの場合を除く
例 ab123 → a123 、 abcde → abcde
という条件を正規表現で記述するにはどのように書けばよいでしょうか?
よろしくおねがいします
784(2): 2014/08/25(月)15:06 ID:mxntKFMv(1) AAS
s/(?<=a)b(?!c)//g
785: 2014/08/25(月)15:31 ID:LYmloza8(2/4) AAS
>>784
echo preg_replace( "/(?<=a)b(?!c)/", "", "123abz123" ); // 123az123
echo preg_replace( "/(?<=a)b(?!c)/", "", "123abc123" ); // 123abc123
動作確認しました
ありがとうございました
786: 2014/08/25(月)15:52 ID:qKDWfdSu(1/3) AAS
頭良いなぁ〜
(?!abc)ab
と書いてしまう…
787(1): 783 2014/08/25(月)15:53 ID:LYmloza8(3/4) AAS
>>784
すいません
先頭の (?<=a) こちらはどういう意味なのでしょうか?
788(1): 2014/08/25(月)15:55 ID:l0tzbBCe(1/2) AAS
先読みとか後読みとかでは?しらないが。
789(1): 2014/08/25(月)15:58 ID:l0tzbBCe(2/2) AAS
正規表現の先読み・後読みを極める!
柔軟性の高い正規表現を書こうとすると,避けて通れないのが先読み・後読みです.
いままではとりあえず的な理解をしていたのですが,それだと説明できない正規表現に遭遇したので,説明できるまで理解を深めてみました.
とりあえず的な理解
正規表現を使って間もない人が先読み・後読みを理解するための説明です.
肯定的先読み(?=pattern)
次の正規表現では直後にbarがあるfoo(barは含まない)に一致します.
foo(?=bar)
否定的先読み(?!pattern)
次の正規表現では直後にbarがないfoo(barは含まない)に一致します.
foo(?!bar)
肯定的後読み(?<=pattern)
次の正規表現では直前に barがあるfoo(barは含まない)に一致します.
(?<=bar)foo
否定的後読み(?<!pattern)
次の正規表現では直前にbarがないfoo(barは含まない)に一致します.
(?<!bar)foo
先読み・後読みはアンカー
上記程度の理解だと次の内容を説明できません.
abcで始まらない任意の文字列を抽出したい場合,/^(?!abc).*/のような正規表現を記述します.
外部リンク:d.hatena.ne.jp
790(1): 2014/08/25(月)15:59 ID:qKDWfdSu(2/3) AAS
>>787
戻り読み
aをポイントにして、その後に続く文字にヒットする(ポイントしたaは含まない)
だから、bだけがヒットして、削除することによって目的が達成する
791: 783 2014/08/25(月)16:11 ID:LYmloza8(4/4) AAS
こういうものがあったんですね かっこいいです
ありがとうございました
792: 2014/08/25(月)16:15 ID:qKDWfdSu(3/3) AAS
参ったなぁ…照れるなぁ…
793(2): 2014/08/25(月)23:13 ID:xXZcDf8b(3/3) AAS
>>782
正規表現置換でただの番号指定参照ではない書式付き指定とか見たこと無いんだが具体例頼む。
794: 2014/08/26(火)00:01 ID:AKSJinfO(1/2) AAS
つまりそういうAPIのライブラリでも作れば人気者になれる?
795(1): 2014/08/26(火)08:06 ID:l0Y41UVi(1) AAS
>>793
いやだから知らないんだろ?だったら見た事あるわけないじゃないか。
なぜもっと素直に聞けないw
796(1): 後読み撲滅委員会 2014/08/26(火)11:08 ID:WIt2FEUm(1/2) AAS
>>788-789
後読み撲滅委員会が来ましたよ
後読みだとマッチ位置のアトを読むみたいな誤解を生むから嫌い
>>790の戻り読みの方がマッチ位置から前に戻るというのが明確で好き
797(1): 2014/08/26(火)22:02 ID:mLMy21sd(1) AAS
>>795
素直に「頼む」って書いてるのに答えられないのか……
番号指定参照の事と間違えてて引けなくなっちゃった?
>>796
後読みだと後方参照と似た印象受けるし、戻り読みの方が好き。
798(1): 2014/08/26(火)22:54 ID:/YmoB5m1(1) AAS
>>793
782のいう「まともなエディタ」が何かわかんないけど、
とりあえずEmacsで\,( )使って中でformatでも呼べばできるんじゃね。
必要ならstring-to-numberあたりもあわせて。
799(1): 2014/08/26(火)23:14 ID:AKSJinfO(2/2) AAS
任意のスクリプトを実行できるエディタなら同じことできそうだね
800: 2014/08/26(火)23:41 ID:jaIpu19W(1) AAS
子供の煽りは放置でいいよ。どうせ社会不適合者のクズだろうし。
801: 前方参照撲滅委員会 2014/08/26(火)23:56 ID:WIt2FEUm(2/2) AAS
>>797
> 後読みだと後方参照と似た印象受けるし、戻り読みの方が好き。
2chだと後方参照しか見ない気がするけど、
BackreferencesをMSは前方参照と略しちゃったりしてるんだよね
どう機械翻訳したら前方参照になるのかと小一時間(ry
外部リンク[aspx]:msdn.microsoft.com
外部リンク[aspx]:msdn.microsoft.com
802: 2014/08/27(水)00:00 ID:ca9UWwTQ(1) AAS
前へ(back)、次へ(next)
803(2): 2014/08/27(水)01:08 ID:LUqBHmJ8(1) AAS
普段意識しないけど「前」って表現は紛らわしい
「前に進め」と「前(の位置)に戻れ」は両方「前」だけど逆の向き
移動体に対する前後と移動の経路に対する前後は同じじゃない
文字列も、文字列の「後ろ」に向かって検査位置が「前進」するし
けど普通なら「前方」と書いたら移動体に対する「前」で、
検査位置(オートマトン)の進行方向(文字列の後ろ)を指す…よなぁ…
>>798-799
それだと書式指定飛び越えて置換ハンドラ作ってる気もするが、
その辺のこと言ってたって事…かなぁ…?誤解を招く表現だな
804: 2014/08/27(水)01:13 ID:bQc+U8zB(1) AAS
良いコード書きたかったら日本語なんて忘れろ
805: 2014/08/27(水)14:55 ID:Gkyyi0oW(1) AAS
>>803
これほんとそうだと思うわw
10年前、車の免許の卒検で「あの車の前に停まれ」っていうので前方だと思ったら手前だったらしく最後に怒られてイラッとしたわw
806(1): 2014/08/27(水)15:12 ID:sYB8gGv2(1) AAS
先読み=その文字列が先行していることを示す
戻り読み=その文字列の後に続くかを示す
なんかやってることは、先読みではなく後ろ読みな感じで、戻り読みは続き読みな感じがする
807(1): 2014/08/27(水)15:19 ID:/vEUt9tC(1) AAS
English is OK.
808: 2014/08/27(水)18:19 ID:Uo1g6O6r(1) AAS
(eigo de ok) is an English variant of 日本語でおk.
Just as "日本語でおk" conveys a request to comment in Japanese, ...
809: 2014/08/27(水)18:20 ID:nJZA/d8q(1/4) AAS
>>807
not english it is.
810: 2014/08/27(水)18:20 ID:WVBb8eJH(1) AAS
English is OKは
English === OK を意味する
811: 2014/08/27(水)18:23 ID:nJZA/d8q(2/4) AAS
”日本語でオーケー” → ”Speak in English”
812: 2014/08/27(水)18:24 ID:nJZA/d8q(3/4) AAS
× in English
○ in Japanese
813: 2014/08/27(水)18:27 ID:nJZA/d8q(4/4) AAS
そもそも訳わからんムズい説明とか専門用語ちりばめ解説にたいして
「このやろう、英語ではなせよな」
”hey, speak in English”
と。
そういう英語圏での話法が輸入されただろ。
どこかのバカが
「日本語でオーケー」
とか言い出してな。
あほか、日本語だろ!
てえめの国語力のなさに文句言え
ってのが大半だけどな
814: 2014/08/27(水)19:06 ID:TYjPELAM(1) AAS
>>806
先読み=戻り読みと勘違いしてない?
815(1): 2014/08/28(木)12:45 ID:pLtajWiU(1) AAS
前後というと文字の位置を連想しがちだけど時間軸(処理順序)の話なんだよな
816(1): 2014/08/28(木)18:21 ID:uZ9r61k2(1/2) AAS
>>815
時間「軸」だと、正負はあっても前後は無い気がするなぁ…原点は動かないし
文脈上の他の要素を介した間接的な前後になってしまいそうで怖いんだが
「時間的に前」「前に処理した」とか…普通に文字列の前後を指してしまわないか?
処理装置(カーソルでもオートマトンでもいい)の進行「方向」の前後で良いと思う
817(1): 2014/08/28(木)18:42 ID:tetCPUIB(1) AAS
時間の進行方向に対して「前」というと進行方向と逆の過去になり、「後」というと進行方向と同じ未来になる
「この前に行った場所に行こう」「この後に飲み屋に行こう」
移動の場合は「前」というと進行方向と同じ向きになり、「後」というと進行方向とは逆になる
「この道をまっすぐ前に進む」「びっくりして後ろに下がる」
文章の場合は読んでいく進行方向に対して、「前」というと進行方向の逆の既読位置で、「後」というと進行方向と同じの未読位置になる
書く場合でも「前」というと既に書かれた部分をしめし、「後」というとこれから書く部分のことになる
文章に対して前半・後半という表現もある
これは時間のケースと同じである
818(1): 2014/08/28(木)19:18 ID:XxtALw5X(1/2) AAS
>>816
前日とか、後日とか言わないか?
819: し 2014/08/28(木)19:22 ID:XxtALw5X(2/2) AAS
>>818
あるいは前後策とか
820(1): 2014/08/28(木)19:32 ID:uZ9r61k2(2/2) AAS
>>817
>「この前に行った場所に行こう」「この後に飲み屋に行こう」
こういうのって予定表上の前後っぽいニュアンスになっちゃうから、
これでホントに時間に対する前後の例になってるか悩むんだよね…
自分で書いといてアレだけど「前に処理した」も予定になりそうだし。
>「この道をまっすぐ前に進む」
「ここで前に戻る」は「前」なのに「戻って」しまうけど、どうするん?
「前方」と「方」をつけると文章でも(読み手の)進行方向になる気がするし、
>>803で出てるけど時間だの移動だので区分するんじゃなくて、
前後という表現が掛かる対象を見て区別したほうが良いと思う。
移動体に掛かるなら進行方向で良いけど、それ以外だと大抵逆方向になる。
821: 2014/08/28(木)19:35 ID:u81Xrccg(1) AAS
いつまでやってるんだよキモいなぁ
822: 2014/08/28(木)19:55 ID:Hg0+wwkG(1) AAS
ムーンウォークはどっち向きに歩いてるん?
823: 2014/08/28(木)20:40 ID:9FDOfLGs(1) AAS
>>820
>「ここで前に戻る」は「前」なのに「戻って」しまうけど、どうするん?
「ここで前に戻る」の「前」は時間経過の「前」だよ
824: 2014/08/28(木)21:26 ID:1RFDsZ4s(1) AAS
d
825: 2014/08/29(金)01:11 ID:4xakm/Il(1) AAS
前がゲシュタルト崩壊してきた。
826: 2014/08/29(金)05:02 ID:YWIzckej(1) AAS
後ろから前からどうぞ
827: 2014/08/29(金)15:32 ID:XeSPYyFB(1) AAS
↓ホモ3連装の岐阜
828: 2014/08/29(金)17:09 ID:FliA9TBF(1) AAS
お前初めてかここは、力抜けよ
829: 2014/08/29(金)18:17 ID:BbDu6wB2(1) AAS
岐阜県民に何の恨みがあるんだお前
830(1): 2014/08/29(金)21:17 ID:ZQUCiV5V(1) AAS
ルーターのログファイルからIPアドレスだけ取り出したいのですが、
さくらエディタにログファイルを張り付けて置換コマンドで
IPアドレスのみ残して他の文字は全部除去出来ますか?
検索なら
(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})
で出来たのですが、これを残して他の文字を削除するというのが出来ませんでした。
条件としては
さくらエディタ(Win7)
テキストファイル
各行に IPアドレスがいろいろ含まれている。
XXX.XXX.XXX.XXX つまりこんな感じ。
その前後には , 空白 タブ ( ) CRLF などがある。
831: 2014/08/29(金)22:19 ID:NX9Ew2LD(1/2) AAS
>>830
検索
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})
置換
$1\n
832: 2014/08/29(金)22:28 ID:NX9Ew2LD(2/2) AAS
あ、間違えた
検索
(?s-m).*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*
置換
$1\n
833: 2014/08/30(土)00:37 ID:3Iv0NAQx(1/3) AAS
サクラエディタは行をまたげないのでmオプションは効かなかったかと。
検索:\G.*?(((?<=\G|[^\d\.])(\d{1,3}\.){3}\d{1,3}(?=$|[^\d\.]))((?!\g<2>).)*|((?!\g<2>).)*$)(\r?\n?)
置換:,$2$6
区切り文字も消すと見づらいので,つけたけど、消すだけなら(\r?\n?)を外して$2に置換で良い。
$6カッコ悪いし、IPアドレス無いときのマッチが邪魔だわ…上手い人はどう書くんだろう?
834(1): 2014/08/30(土)00:45 ID:YmGD3eGR(1) AAS
サクラエディタのあの仕様はマジで勘弁して欲しい
愚痴スマソ
835(1): 2014/08/30(土)00:56 ID:Gk/RrE5v(1) AAS
さくらエディタは、mオプションがデフォルトでON
836: 2014/08/30(土)01:32 ID:3Iv0NAQx(2/3) AAS
.*?が怖かったから修正、ついでに0〜255までの値にのみマッチするように修正
検索:((?!((?<=\G|[^\d\.])((1?\d?\d|2[1-4]\d|25[1-5])\.){3}\g<4>(?=$|[^\d\.]))).)*(\g<2>)?\g<1>*(?=$|\g<2>)(\r?\n?)
置換:<$5>$6
先読み等のアンカー集合内での捕獲式集合は番号指定参照などに制限があるけど、
部分式呼出しなら(当然だけど)自由に再利用できるんだねぇ…$1〜$4が先読みを捕獲してる辺含めてなんかキモい。
>>834
だね。お陰でWSH/JScriptのreplaceが大活躍だけど、鬼車拡張使いたい時はどうにもならん…
>>835
けれど行ごとに処理するから殆ど意味がないっていう話。$とかはサクラエディタ自身が検索用の正規表現弄るらしいし。
837(1): 2014/08/30(土)02:07 ID:6GRP07Vc(1) AAS
皆さんありがとうございました。
836さん方式で完璧に取り出すことが出来ました。
正規表現初心者の私には殆ど理解できない式です。よくこんな物凄い式が書けますね。
なお、私の提示した条件に
IPアドレスが無い行もある
って入れ忘れていました。
今回作ってもらった表現式ですと、この行は <> に変換されました。
もし簡単に変更できるなら、IPアドレスの無い行は除去する式に変更して頂けると嬉しいです。
(せっかく作ってもらって文句言うようで申し訳ありませんが。。。)
838: 2014/08/30(土)03:03 ID:3Iv0NAQx(3/3) AAS
>>837
やっぱIPアドレス無いときのマッチは邪魔だよねぇ…
区切り文字を含んだ置換文を、IPアドレスの存在しない行の置換にも流用した弊害です。
置換文を$5にすればゴミは消えるが区切りも消えるし、$5$6とかだと空行が残ってしまう。
二度目の置換で<>を削除するのが一番きれいに置換できる…と思ったのでああなった。
元々存在する区切り文字を流用することは出来る。(\g<1>?をIPアドレスと一緒に捕獲して置換文を$5$6や$5にする)
検索:((?!((?<=\G|[^\d\.])((1?\d?\d|2[1-4]\d|25[1-5])\.){3}\g<4>(?=$|[^\d\.]))).)*(\g<2>\g<1>?)?\g<1>*(?=$|\g<2>)(\r?\n?)
ただ、区切り文字の表記ゆれがそのまま出力に反映されて、文章中に存在するIPアドレスとかが哀しいことに
「8.8.8.8とはGoogleのDNSサービスです。0.0.0.0は無効なアドレスや特殊なアドレスを意味します」→「8.8.8.8と0.0.0.0は」
839: 2014/08/30(土)20:38 ID:v0qXwKg4(1) AAS
dj
840: 2014/08/31(日)02:37 ID:IR2UIS8T(1) AAS
あ、2[1-4]\d|25[1-5]じゃなくて2[0-4]\d|25[0-5]じゃないとだめじゃんコレ。誰か突っ込んでよ…
841(2): 馬鹿1号 2014/09/01(月)20:29 ID:63998s3t(1) AAS
だいぶ前に、C#でWindows用に正規表現練習ツールを作って
ソースとexeのアップロードを以下のアドレスに上げたのですが
外部リンク:sourceforge.jp
どなたか、使ってみて
改良点があれば教えて下さい。
最近、Androidアプリばかり作っているので
ひさびさ、C#も触っとこうと思ってる次第です。
842: 2014/09/01(月)20:41 ID:2GXB3w06(1) AAS
へぇ
svn使わなくてzipでソース配布でもSouceForge.JPでプロジェクト作ってもいいんだな
知らなかったわ
843(1): 2014/09/02(火)00:19 ID:6ckoH3d5(1) AAS
>>841
Support Textをパクってください〜
Windows版とAndroid版が欲しい///
正規表現を連続実行できるテキストエディタお願いしますー!
844: 2014/09/02(火)00:20 ID:LHXA0qlA(1) AAS
web上で出来るからなぁ、web上でも凝った作りのものもあるけど>>512とかで十分。
それより正規表現は方言がいろいろあるからどの方言かくらいは書いといたほうがいいと思う。
845: 2014/09/02(火)01:01 ID:1/i9nKxD(1) AAS
>>843
SupportTextって1MBくらいのテキスト扱える?
846: 2014/09/02(火)14:54 ID:1Vq/ncad(1) AAS
メアドとユーザー名とパスワードを
メアド……(.+)@gmail.com
ユーザー名……\1.+
パスワード…….+\1
って風に部分的に使い回すのってセキュリティ的にまずいかね
847: 2014/09/02(火)15:11 ID:O4BThnl4(1) AAS
質問する場所間違ってるぞ
848: 2014/09/04(木)00:48 ID:+sF4QUe9(1/2) AAS
数を数える箇所で洋数字をひい、ふう、みい、よう、いつ、むう、なな、やあ、ここ、とおと置換させたいのですが、どうしたら良いでしょうか。
時間や番号は通常のままです。
SAPI5読上げ用にVBScript.RegExpで使うことを考えています。
849: 2014/09/04(木)00:54 ID:6btE19Xl(1) AAS
数を数える箇所、の定義を明示しろ
あと、一回の正規表現で
A ⇒ A'
B ⇒ B'
...
のように置換することは不可能
850: 2014/09/04(木)01:52 ID:Ks0RyVTt(1) AAS
同じWSHでJScriptのString.replaceならreplaceTextに関数指定すれば正規表現の適用回数は一回で行けるかもね。
VBScriptだと複数回RegExp.Replace置換するかRegExp.Executeしてループ内で変更してくか…どっちにしても面倒。
851: 2014/09/04(木)22:06 ID:+sF4QUe9(2/2) AAS
レスありがとうございました。
やはり結構メンドくさそうなのですね。
定義もまだちゃんと定まっていないので出直します。
852: 2014/09/04(木)22:45 ID:U17zlyiG(1) AAS
正規表現を使わなくても出来るよね。正規表現が分からないなら別の方法でやればいいだけの話。
853: 2014/09/04(木)22:51 ID:4HghpGpo(1) AAS
むしろ、正規表現でしか出来ないことなんてない件
854: 2014/09/05(金)01:48 ID:LrK9xOye(1) AAS
正規表現しか使えない状況ってのはたまにあるけど
最低限の処理以外は、出来れば遠慮したい
855: 2014/09/05(金)02:51 ID:wkXRWLH9(1) AAS
正規表現使わない方が速い場合が多いからね。
856: 2014/09/05(金)02:55 ID:wDfAxYZ7(1) AAS
書いてる時はいいけど半年くらい後に読むと
何をしようとしているのかすぐには思い出せない
857: 2014/09/05(金)12:30 ID:K3KOceOQ(1) AAS
なんとかtool使ってるからコメント付きで保存してる。保存してもまたいじるってことが滅多にないけどね。
858: 2014/09/06(土)19:48 ID:Bwavr3lm(1) AAS
>>841
適当な例題と回答の一例みたいなのが欲しい
859(2): 2014/09/09(火)03:50 ID:3/iFB8Vu(1) AAS
2chのVIPのIDかどうかを正規表現で調べたいのですが
IDが0-9a-zA-Z+/の64個の文字の9桁で出来ています
これを
/^[a-zA-Z0-9\+\/]{9}?$/
で正規表現を作ってみたのですが
IDに+が入った時にマッチしません
+も[]にエスケープして入れているのに
何故なんでしょうか?
PHPでやっています
860(2): 2014/09/09(火)06:39 ID:hQhjEIGx(1) AAS
>>859
PHPぼ正規表現文法は知らないけど、
+や/をそれぞれ\x2Bとか\u002fとかのコードポイント指定にしても駄目?
(+の問題以前に正規表現パターンの引用符/をバックスラッシュでエスケープできてるのかが疑問)
861: 2014/09/09(火)07:14 ID:9n77QlVw(1/2) AAS
>>860
文字集合内では量指定子や正規表現リテラルのデリミタ文字はエスケープ省略できる事が多いけど駄目なんかね?
862(2): 2014/09/09(火)09:17 ID:rLIm4nxe(1/3) AAS
>>859
再現する最小限のコードを書け。他のところが間違っているのだろう
$ php -r 'print preg_match("!^[a-zA-Z0-9+/]{9}$!","12345678+");'
1
書けたら質問も不要になってそうだが報告は必要。
863(3): 2014/09/09(火)10:35 ID:GI4rgDDA(1) AAS
>>860
ダメでした
>>862
if(isset($_GET['id'])) {
$id = $_GET['id'];
if(preg_match('/^[a-zA-Z0-9\+\/]{9}?$/', $id)){
echo "IDです<BR>";
}else{
echo "not ID<BR>";
exit(-1);
}
}
が最小限のコードです。
と、書きつつ他の原因を調べてたところ
GETからIDを取ってるところが怪しいようです。
$idを表示させたらちゃんとIDが表示されるのですが
preg_matchではちゃんと機能してくれません。
文字列リテラルで直接ソースにIDを書き込んだら
preg_matchがちゃんと機能してくれました。
正規表現とは別の問題っぽいので
質問は取り下げさせて頂きます。
みなさまありがとうございました。
864: 2014/09/09(火)10:59 ID:rLIm4nxe(2/3) AAS
>>863
+がエスケープされて%2bとかされてるんじゃないの。
865: 2014/09/09(火)12:34 ID:7s/ClwS2(1) AAS
>>863
文字列のエスケープとかぶってるだけじゃねーの?
外部リンク[php]:php.net
866: 2014/09/09(火)12:41 ID:Yqht+GIw(1) AAS
>>863
URLエンコードについてググレ
867: 2014/09/09(火)16:59 ID:9n77QlVw(2/2) AAS
php…にかぎらないけど(特にWebアプリケーションでは)、文字列のエスケープに
十分注意しないと巨大なセキュリティホールこさえて死ぬからちゃんと勉強しとけよー
868: 2014/09/09(火)17:54 ID:3/omhs4l(1) AAS
\が原因だと思います。どうしてそこで\するのか
869: 2014/09/09(火)17:58 ID:pzDyfk+k(1) AAS
ぺちぱーは隔離板あるんだからこっちくんな
870(1): 2014/09/09(火)18:00 ID:+h+xKEPP(1/2) AAS
エスケープはいるだろ。基本、しなくていい文字でやっても無視されるので、余分にしてもいい。
PHPの''と""の違いでは?
囲いを、""にしたらどうだ。
871: 2014/09/09(火)18:04 ID:+h+xKEPP(2/2) AAS
PHPにおけるシングルクォーテーションとダブルクォーテーションの違い - Qiita
外部リンク:qiita.com
シングルクォーテーションとダブルクォーテーションの違いで詰まった。
外部リンク:qiita.com を参考にした、改行コードを統一するコード
$tmp = preg_replace("/\r\n|\r|\n/",'\n', $hogehoge);
$tmp = preg_replace("/\r\n|\r|\n/","\n", $hogehoge);
どのように挙動が異なるかは上のコードと以下を続けて試してみれば良い。
クォーテーションを統一しないと、意図したとおりの挙動を示さない。
というのも、シングルかダブルかによって、\nを改行として扱うかが変わるからだ。
ダブルはシングルより多くの文字を、エスケープして扱う。
外部リンク[php]:www.php.net を見れば何がエスケープされるか分かる。
変数の展開だけがクォーテーションの違いではないという教訓です。
872: 2014/09/09(火)18:56 ID:rLIm4nxe(3/3) AAS
>>870
>>862がダブルクォート使ったのはコマンドラインだからで、基本的にはシングル使う。ダブルは改行くらいか。
873: 2014/09/10(水)07:51 ID:T8BC/FY4(1) AAS
>>738
>>740
>>747
返事おそくなってすいません
どうもありがとうございました
874(3): 2014/09/10(水)22:01 ID:TE4FFqo+(1) AAS
●Regular Expressionの使用環境
Perl
●検索か置換か?
置換
●説明
「"」で囲まれた文字列以外のスペースを置換したい
●対象データ
a b c "d e f" g h "i j k" l m
●希望する結果
a,b,c,"d e f",g,h"i j k",l,m
よろしくおねがいします
875(1): 2014/09/10(水)23:02 ID:F+zfATH5(1) AAS
>>874
外部リンク:ideone.com
876(3): 2014/09/10(水)23:51 ID:ck0DKWEV(1) AAS
" のエスケープは考えなくてもいいのか?ちなみにこれは1つの正規表現で置換可能。
877: 2014/09/11(木)00:03 ID:ItD6Xlgu(1/2) AAS
>>876
ぜひ回答をお願いします
俺の正規表現力ではわからなかった
878: 874 2014/09/11(木)00:25 ID:O797lH9A(1/2) AAS
>>875
ありがとうございます 助かりました
>>876
わたしからも回答ぜひおねがいします
879(6): 2014/09/11(木)01:52 ID:RIJn46pc(1) AAS
876じゃないが
\ (?=([^"]*"[^"]*")*[^"]*$)
でいけるかな
880: 876 2014/09/11(木)14:32 ID:aG4exxJA(1) AAS
\Gを使えば出来るという意味で書いたけど>>879のほうが秀逸だった。
881: 2014/09/11(木)15:07 ID:ItD6Xlgu(2/2) AAS
勉強になりました
882: 874 2014/09/11(木)20:04 ID:O797lH9A(2/2) AAS
>>879
ありがとうございました
883(1): 2014/09/12(金)01:46 ID:RnFNDXF7(1/2) AAS
>>879
凄いな…全然解らない…orz
884(2): 2014/09/12(金)03:57 ID:RnFNDXF7(2/2) AAS
>>879
\ (?=([^"]*"[^"]*"[^"]*)*$)
これで出来て
$を無くすと出来ない…
先読みの中に$を入れると…
なぜ否定先読みみたいに動作してるのだろう…う〜む
885(2): 879 2014/09/12(金)05:21 ID:lGY9wDxG(1/2) AAS
>>883-884
([^"]*"[^"]*")*[^"]* の部分は、
[^"]* →「" が0回出現する文字列」
[^"]*"[^"]*"[^"]* → 「" が2回出現する文字列」
[^"]*"[^"]*"[^"]*"[^"]*"[^"]* → 「" が4回出現する文字列」
[^"]*"[^"]*"[^"]*"[^"]*"[^"]*"[^"]*"[^"]* → 「" が6回出現する文字列」
……
の全てにマッチ、つまり「" が偶数回出現する文字列」にマッチする。
\ (?=([^"]*"[^"]*")*[^"]*$) 全体では、「自身の直後から行末までに " が偶数回出現するスペース」にマッチすることになる。
$を抜くと、行末まで読まずに " が偶数回出現した時点でマッチしてしまう。
空文字列も「" が0回出現する文字列」なので、先読みの中身が空文字列にマッチしてしまい、
\ (?=([^"]*"[^"]*")*[^"]*) 全体では「空文字列が後続するスペース」、すなわち全てのスペースにマッチしてしまうことになる。
886(2): 879 2014/09/12(金)07:35 ID:lGY9wDxG(2/2) AAS
嘘言った。最長マッチだから空文字列にマッチするわけじゃなくて「" を偶数個含む最長の文字列」にマッチだ。
だから右に " が偶数個あったら行末までマッチするし、奇数個あったら「最後の " の手前」までにマッチする。
いずれにせよ \ (?=([^"]*"[^"]*")*[^"]*) が全てのスペースにマッチするのは変わらない。
887(1): 2014/09/12(金)08:07 ID:9em7Blpz(1) AAS
>>884-886
「$が無いと、最悪0文字でも成立する先読みになってしまってアンカーとしての効果がなくなる」
てだけで良いんでは?
888(1): 2014/09/12(金)08:54 ID:z7VCF1w0(1) AAS
正規表現覚えようと思ってこのスレ開いたけど
自信なくすわ…
889: 2014/09/12(金)14:41 ID:9mhn+6ow(1/2) AAS
初心者用のサイトがなかなかないのがなぁ。
大抵のサイトがメタ文字の働きを紹介して終わり。
890: 2014/09/12(金)16:09 ID:oxD6azvx(1) AAS
それが初心者レベルだろ
そっから先はたんに頭良いか否かの問題
891: 2014/09/12(金)16:17 ID:9mhn+6ow(2/2) AAS
読んだ初心者は
「・・で?」
ってなると思う。
892: 2014/09/12(金)16:19 ID:LxISYSrD(1) AAS
やりたいことがあったら……で?ってことにはならんだろ
なんで正規表現調べたんだよ
893: 2014/09/12(金)17:11 ID:N0Ak2k0g(1) AAS
使い方の例載せてるとこ見れば済む話だわな
ものがどれほど使いこなせるかは工夫というかなんというか
894: 2014/09/12(金)18:09 ID:SdpEoEyB(1) AAS
>>885-886
>>887
なるほど
今まで、上のような正規表現を書いてもアンカーとして効果が得られず悩んだことがありました。勉強になります
\ (?=("[^"]*"[^"]*)*$)
こうすることで、なるほど〜!と思いました
こういう使い方もあるんですね
使い方のサイト見て、改良するのが一般的かと思う
なかなか見つからないけど
895: 2014/09/12(金)21:48 ID:m9C6tOaw(1/2) AAS
>>888
エロ画像集めるスクレイピングやってりゃすぐ覚えるよ
896: 2014/09/12(金)21:49 ID:m9C6tOaw(2/2) AAS
ID:m9C6tOaw m9(^Д^)プギャー
897: 2014/09/12(金)22:07 ID:Qq2j8Y7Z(1) AAS
だーれが殺したクックロビン♪
898(2): 2014/09/18(木)06:28 ID:LuX8mYFM(1/4) AAS
AA省
上下前次1-新書関写板覧索設栞歴
あと 103 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s