トップページ⇒php
825コメント240KB

正規表現道場@2ch Part2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/24 22:57ID:LrbVcl3Y
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

リンクなどは>>2-5のあたりに。
0514nobodyさん03/05/20 01:10ID:???
フルパスで入力した場合は下のような値が入るので問題ないのですが
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
perl test.plというようにカレントディレクトリから実行して下のような値が入った場合はファイル名を取得できません。
$b='httpd.conf';

$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
$b='httpd.conf';
両方の値からhttpd.confだけを抜け出せないでしょうか。
スレ汚しで申し訳ないです。
0515nobodyさん03/05/20 01:11ID:???
#---------------test.pl----------------
my $path1 = $0;
print "$path1\n";
($_)= $path1 =~ /\\([^\\]+)$/;
$path1 = $_;
print "\$path1 :\n";
print "$path1\n\n";

my $path2 = $0;
print "$path2\n";
($_)= $path2 =~ /^.+\\(.+)$/;
$path2 = $_;
print "\$path2 :\n";
print "$path2\n\n";

$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print "\$a :\n";
print;
print "\n";
$b='httpd.conf';
($_)=$b=~ /^.+\\(.+)$/;
print "\$b :\n";
print;
#--------------------------------------
0516nobodyさん03/05/20 09:12ID:???
$path =~ /([^\\]\+)$/
print "$1";

っていうか use File::Basename; 使え。
051751503/05/20 12:28ID:???
>>516
ありがとうございます。
皆さんのおかげで完成しました。
use File::Basename; も調べてみます。
051851503/05/20 12:30ID:???
#---------------test.pl----------------
my $path1 = $0;
print "$path1\n";
($_)= $path1 =~ /\\([^\\]+)$/;
$path1 = $&;
print "\$path1 :\n";
print "$path1\n\n";

my $path2 = $0;
print "$path2\n";
($_)= $path2 =~ /^.+\\(.+)$/;
$path2 = $&;
print "\$path2 :\n";
print "$path2\n\n";

my $path3 = $0;
print "$path3\n";
($_)= $path3 =~ /[^\/\\]+$/;
$path3 = $&;
print "\$path3 :\n";
print "$path3\n\n";

my $path4 = $0;
print "$path4\n";
($_)= $path4 =~ /([^\\]\+)$/;
$path4 = $&;
print "\$path4 :\n";
print "$path4\n\n";
#--------------------------------------
051951503/05/20 12:33ID:???
#---------------test.pl----------------
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /[^\/\\]+$/;
print "\$a :\n";
print "$&\n";
print "\n";
$b='httpd.conf';
($_)=$b=~ /[^\/\\]+$/;
print "\$b :\n";
print "$&\n\n";

$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /([^\\]\+)$/;
print "\$a :\n";
print "$&\n";
print "\n";
$b='httpd.conf';
($_)=$b=~ /([^\\]\+)$/;
print "\$b :\n";
print "$&\n";
#--------------------------------------
スレ汚しに付き合って頂いて感謝でした。
0520nobodyさん03/05/20 12:47ID:ridin1oO
>>515

use File::Basename;
$path = 'C:\Program Files\Apache Group\Apache\conf\httpd.conf';
$file = basename($path);
print $file;
0521あぼーんNGNG
あぼーん
0522山崎渉03/05/22 01:59ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0523nobodyさん03/05/25 03:32ID:???
山崎のせいで落ちるところだったわ
0524あぼーんNGNG
あぼーん
0525山崎渉03/05/28 17:06ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0526nobodyさん03/06/06 19:09ID:GD1DFdBg
文字クラスで、半角英数字とクエスチョンそのものは、
[a-zA-Z0-9,\?]
で良いのでしょうか。

やりたいことは、↓です。
function check($address){
 if ( ereg("^[a-z,A-Z,0-9,\(,\),\.,\_,\/,\+,\?,\-]+@[^.@!\"#$%&'()~^|]+\.[^@!\"#$%&'()~^|]*[^.@!\"#$%&'()~^|]$", $address)){
  return true;
 }
 else{
  return false;
 }
}

$email_1 = "a(a)a?_s-/[email protected]";
$email_2 = "a(a)a_s-/[email protected]";

$email_1も$email_2もtrueが返ってきてほしいのに、
$email_2のみがtrueで返ってきます。。
?そのもにをマッチさせるにはどうすれば良いのでしょうか。

0527あぼーんNGNG
あぼーん
0528nobodyさん03/06/07 00:42ID:???
>>526
PHP だよね?漏れのところ (PHP 4.3.1) ではどっちも true が返るよ?
0529nobodyさん03/06/07 18:56ID:???
>>526
横槍スマソ。
これじゃ駄目かい? ttp://www.din.or.jp/~ohzaki/perl.htm#Mail
053052603/06/09 10:45ID:???
>>528
はい。PHPです。どちらもtrueが返るようになりました。
原因は、「if ( ereg("^[a-z,〜〜〜」を通す前にさらにチェックしていてそこで引っかかっていました。
正規表現とは関係なくてすいませんでした。

>>529
そこはperlだったのですが参考になりそうなページでした。ありがとうございました。
0531yoko03/06/10 13:46ID:QvCU0It/
秀丸でやろうとしているんですが、無理でしょうか?

以下のような形式のテキスト ファイルを扱っています。生徒から備考までを
1 ブロックとして、生徒番号 800 までのブロックがあります。本当は XML か
CSV で管理するべきだと思うので近いうちに変換する予定です。

生徒: 1名前: 田中得意科目: 数学苦手科目: 古文備考: 2 学期より編入

生徒: 2名前: 山田得意科目: 国語苦手科目: 世界史備考: 模試未受験

生徒: 3
..

今正規表現をつかって各データの手直しをしているのですが、とても簡単なと
ころでつまづいています。
"生徒: 2" から "生徒: 2." という具合に、生徒行の数字の後ろにピリオドを
つけたいのですが、どのような表記で置換処理をしていいのかわかりません。
"生徒: [[0-9]+|[02-9]]" で "生徒:" とその数字部分を検索でヒットするこ
とはできるのですが、これを "生徒: [[0-9]+|[02-9]]." で置換しても "生徒:
[[0-9]+|[02-9]]." に入れ替わるだけです。大きな勘違いをしているとは思
うのですが…正規表現の資料をみてもここから先に進むことができません。
すごくつまらない質問だとは思いますが、どなたかみていただけないでしょう
か。

0532yoko03/06/10 13:48ID:???
↑のテキストの部分おかしいですね。
書き直します。

生徒: 1
名前: 田中
得意科目: 数学
苦手科目: 古文
備考: 2 学期より編入

生徒: 2
名前: 山田
得意科目: 国語
苦手科目: 世界史
備考: 模試未受験

生徒: 3
..
0533nobodyさん03/06/10 13:56ID:wps94Nox
CSVファイルに

AAAAA http://www.a.com/
BBBBB http://www.b.com/
CCCCC http://www.c.com/

というタイトルとURLのペアのファイルがあるとします。
で、例えば

「AAAAAはBBBBBでCCCCC」
というテキストを
「<a href="http://www.a.com/">A</a>は<a href="http://www.b.com">〜」
みたいに変換したいです。

上記のペアでしたら、順に検索して置換すれば済むことですが、もし
最後の方に下記みたいなペアがあると
href http://www.href.com/

「<a <a href="http://www.href.com">="http://www.a.com〜」
のように変換されてしまいます。

こういう場合はどうすればいいんでしょうか?
できればそれぞれの置換したい単語が元のテキストを参照できるようにしたいです。

0534nobodyさん03/06/10 14:34ID:???
>>531-532
おそらく秀丸のヘルプ嫁。かと。
正規表現の互換があるかどうか判らないが Perl だと、
s/(生徒: \d?\d)/$1\./g; 等。

>>533
チョソなのでニポンコよくわからないてす。
ニポンコむつかしにだ。
0535nobodyさん03/06/10 23:58ID:???
>531-532
ヘルプ開いて「タグ付き正規表現」というのを読めば幸せになれるかと
0536nobodyさん03/06/11 01:31ID:???
>>533
#!/usr/local/bin/perl

my $text = "AAAAAはBBBBBでCCCCCなhrefさ";

my %dictionary = (
"AAAAA" => "http://www.a.com/",
"BBBBB" => "http://www.b.com/",
"CCCCC" => "http://www.c.com/",
"href" => "http://hre.f.com/",
);

my $pattern = join('|', map { quotemeta($_) } keys(%dictionary));
$text =~ s/(${pattern})/<a href="$dictionary{$1}">$1<\/a>/g;

print "[$text]\n";
0537nobodyさん03/06/11 02:54ID:???
あ、キーは長い順に sort しなきゃダメかな。まいっか。
0538yoko03/06/11 13:19ID:FQ/QXZet
>>535
ありがとうできました!

チュパ (←フェラ)
0539yoko03/06/11 13:20ID:???
>>534
チュパ♪
0540nobodyさん03/06/11 13:54ID:???
>>537
チュパ(←カブラ)
0541nobodyさん03/06/11 14:04ID:???
>>537
チュッパ(←チャップス)
0542nobodyさん03/06/11 16:25ID:u2aqyjyI
解決せぬまま、日が変わってしまいました。
すみません、一つ質問させてください。

HTMLファイル内のアンカータグで指定されているURLを全てエンコードして返すコードを書きましたが、どうも思う
ように動いてくれません。問題のコードは下記となっております。
-----------------------------------------------------
while(<FH>){
  if($_ =~ /\<a.*?href.*?\=.*?\>/ig){
    my $tmp = $_;
    while($tmp =~ /(.*\<a.*?href.*?\=)(.*?)(\>.*?)(\<|\n)/ig){
      my $tmp1 = $1; my $tmp3 = $3;
      my $tmp2 = main::url_encode($2);#エンコードルーチン
      $tmp2 =~ s/\%20//g; $tmp2 =~ s/\%22/\"/g;
      $index_file .= $tmp1 . $tmp2 . $tmp3;
    }
  }
  else{
    $index_file .= $_;
  }
}
-----------------------------------------------------
1行に2つ以上のアンカータグがあった場合を考えてwhileを使用しておりますが、その部分の正規表現に問題が
あるというところまでわかっていながら、全く前進せぬまま日が変わってしまいました。情けないです。
ここの正規表現の区切りとなるものが曖昧なことから、うまく認識してくれず、整形後のHTMLファイルがおかしく
なってしまっているのだと思われます。

もし宜しければ、教えてください。
すみませんが宜しくお願いいたします。
0543nobodyさん03/06/11 16:35ID:???
>>542
誤爆か●朕か悩むところ。
0544nobodyさん03/06/11 19:24ID:???
>>542 ヒント

$reg "s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]";

while ( $txt =~ /$reg/g ) {
 .
 .
 .
}
0545nobodyさん03/06/11 20:35ID:???
>>544
貴重なヒント感謝です。
しかし、厨房な私にはどうも理解できていないみたいです。
せっかくのヒントをいただきながら、本当に申し訳ありません。
0546nobodyさん03/06/12 04:14ID:???
>>545 ヒントその2
ttp://www.din.or.jp/~ohzaki/perl.htm#httpURL
0547nobodyさん03/06/13 23:26ID:sIi8OqiB
(\$|\%|\@)[^a-zA-Z]*?
↑このような正規表現の場合、これは
頭が"$"or"%"or"@"のいずれかから始まって
続いて、アルファベット以外が来る場合。だと思うのですが?
最後の*?はどういう意味でしょうか?
*は0字以上、?は0か1だと覚えているのですが・・・
054854703/06/13 23:27ID:???
あ、ちなみにこれは秀丸エディタで
強調表示するためのものです(perl版)。
0549nobodyさん03/06/13 23:32ID:???
最短マッチは、その後にパターン指定がなければ使う意味がなきにけり
0550nobodyさん03/06/14 00:26ID:???
秀丸の正規表現に最短マッチはなかりけり。
055154703/06/14 00:29ID:???
最短マッチで検索してみました。
.*hogeに対して
.*?hoge
は、検索対象に対してhogeがヒットした一番最初の部分を
取るという事ですね!
例えば
hogeXXhogeXXhoge
の場合後者は最初のhogeでマッチ。前者は
3つめのhogeでマッチ!
という事ですね!?

055254703/06/14 00:32ID:???
>>550
そ、そうなんですか!?
http://hidemaru.xaxon.co.jp/lib/hilight/perl_php.html
この作者のミスという事でしたか・・・。
しかし勉強になりましたです。
ありがとうございました。
0553nobodyさん03/06/15 21:39ID:mUOjbxbY
test.htmlの中身が

<!-- $aaa --> <!-- $bbb -->

と記入されていて、cgi本体で
$aaa = 'aaaの中身';
$bbb = 'bbbの中身';

と定義されている時
test.datをopenし

while(<FH>){
  正規表現で$aaaなどの頭に$がついてるのを定義されている変数と置き換える
}

とするにはどうすれば良いでしょうか?
0554nobodyさん03/06/15 22:16ID:???
ない知恵を絞って考えてみましたが、どんなもんでしょう。
とりあえず、下のスクリプトで動くには動きますが。。。

$aaa = "あ";
$bbb = "い";
$ret = "\$aaa\$bbbb";

$Hash{'\$aaa'} = $aaa;
$Hash{'\$bbb'} = $bbb;
while(($key,$value)=each %Hash){
$ret =~ s/$key/$value/;
}
print "$ret\n";

#実行すると「あいb」と表示される。
0555nobodyさん03/06/15 22:18ID:???
>>553
意味わからん
ファイルがどうこうなんてスレ違いだ
正規表現で何をどう置き換えたいのかだけはっきりせよ
055655303/06/15 23:18ID:/un8khu+
>>554
おぉ〜どうもありがとう。
参考にさせてもらいます。
>>555
出し惜しみせずに書いたつもりでしたが・・・シンプルに書き直します↓

$bbb = 111;
$ccc = 222;
$aaa = 'XXX $bbb XXX $ccc XXX';

print なにか

出力結果
XXX 111 XXX $ccc XXX

というのをやりたいです。また$aaa に含まれる変数名 例$bbbなど
は1つだったり3つだったりとするので一般化したいです。

0557nobodyさん03/06/15 23:31ID:???
>>556
正規表現というより、どっちかといえばperlのコーディングのほうがメインだな。
他でやってくれ。
0558nobodyさん03/06/15 23:32ID:???
>>556
#!/usr/local/bin/perl

my $text = 'XXX $bbb XXX $ccc XXX $ddd XXX';

my $dictionary = {
"bbb" => "111",
"ccc" => "222",
};

sub replace_string {
my $dictionary = shift;
my $text = shift;

# $text =~ s/(\$(\w+))/$dictionary->{$2}?$dictionary->{$2}:$1/ge;
$text =~ s/(\$(\w+))/$dictionary->{$2}/ge;

return $text;
}

printf "[%s]\n", $text;
printf "[%s]\n", replace_string($dictionary, $text);
055955303/06/15 23:49ID:/un8khu+
>>557
う・・・そうでしたか。。スマソです。
>>558
おぉおぉ〜どうもありがとうございます。
勉強になりました。
多謝!!
0560nobodyさん03/06/16 00:49ID:???
>>558=バカ
056155803/06/16 01:26ID:???
>>560
漏れも自分でそう思った。
0562nobodyさん03/06/16 03:58ID:???
なぜ?
0563nobodyさん03/06/16 05:58ID:???
>>557だから。
0564nobodyさん03/06/16 07:28ID:???
まぁ、いいじゃねぇか。たまには…。
マタ〜リしすぎだしこのスレ
0565nobodyさん03/06/19 09:48ID:zhmAwMLg
すいません、ちょっと質問なんですが
今現在、<a name="1000</a>になってるソースを
<a name="1000">1000</a>に変更したいのですが
どうすればいいんでしょうか?

ちなみに「1000」の部分は「1」から「1000」までの連番で
<a name="1">1</a>
     から
<a name="1000">1000</a>
のようにしたいんです。
ヘンテコな説明ですみません。
0566nobodyさん03/06/19 10:26ID:???
>>565
perlの場合はこんな感じかな。(変換前のHTMLが間違ってるけどそれでOKという前提で)

s/(<a name=")(\d+)(<\/a>)/$1$2">$2$3/;
0567nobodyさん03/06/19 10:51ID:???
http://2ch.net/
http://www.2ch.net/
http://www2.2ch.net/
上のすべてに対応するためにはどのように書いたらいいのでしょう?

http://(www\.|www2\.)?2ch\.net/

???
0568nobodyさん03/06/19 10:56ID:bERWsbmj
正気表現とオートマトンはどのような関係にあるんですか?
0569nobodyさん03/06/19 11:13ID:???
>>568
友達以上恋人未満
0570nobodyさん03/06/19 12:11ID:???
>>568
like以上love未満
0571nobodyさん03/06/19 19:38ID:???
>>567
それでいいんじゃないの?何かおかしい?
057256503/06/19 21:37ID:???
>>566
レス遅れてすみません凹
早速、やってみたんですが
思ったように出来ませんでした(>_<)

それと申し遅れましたが、自分
「speeeeeed」というソフト使ってるんですが
このソフトで正規表現を使った置き換えが
出来たらうれしいんです。

わがまま言ってすみません。。
0573nobodyさん03/06/19 21:45ID:???
speeeeeed じゃなくて speeeeed だろ。
BREGEXP.DLL導入すれば正規表現使えるって書いてあるから導入すればいいんじゃないのん?
やりかたはHELPに書いてあった。
057456503/06/19 21:58ID:???
>>573
すいません「e」が一個多かったですね^^;
はい、BREGEXP.DLLは導入済みなんですが
正規表現の構文?がわからないので・・・(涙
057551503/06/19 22:15ID:???
>>574
勉強すればわかるようになる。
とりあえず自分で調べてみな。
0576nobodyさん03/06/19 23:04ID:???
ホスト名にマッチする正規表現は知りませんか?
0577nobodyさん03/06/19 23:21ID:???
>>576
ホスト名には決まった書式はないので無理
057857603/06/20 00:11ID:???
ども。576です。
取り敢えず、簡易ながら
\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+
で落ち着いきたく思うのですが、
ENVの中のHTTP_FROMとかHTTP_SP_HOST内で使うには問題ありませんでしょうかね‥?
057957603/06/20 00:13ID:???
スミマセン。
[\da-zA-Z\-](?:\.[\da-zA-Z\-])+
デス。
0580nobodyさん03/06/20 00:35ID:???
HTTP_FROMやHTTP_SP_HOSTにホスト名が入ることはないのに?
0581nobodyさん03/06/20 00:55ID:???
マジで?
でも、HTTP_SP_HOSTはHOSTと書いてある時点で入る可能性は否定出来ないのでは?
0582nobodyさん03/06/20 01:04ID:???
入るよ
0583nobodyさん03/06/20 01:15ID:???
痛いよ
058457603/06/20 01:28ID:???
今度はe-mailにはマッチしないようにしようとしたのですが、
[^@]\b([\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+)\b[^@]
これでは対象が先頭から始まる場合、もしくは末尾で終わる場合にマッチしません‥
ダサイ回避策として、検索する文字列に予め先頭と末尾にスペースを入れるという方法がありますが、
正規表現のみで解決する良い手段はないでしょうか???
0585nobodyさん03/06/20 01:38ID:???
HTTP_FROMやHTTP_SP_HOST内で使うっていうなら他のものが
入ることはないでしょ。

何が含まれているかわからない中からホストを完璧にマッチさせる
正規表現は不可能だし、メールアドレスもまあまあマッチすれば
いいなら、過去ログであったはず。
058657603/06/20 01:44ID:???
ども。ども。
なんとか自己解決しました。
一応どんなものになったかカキコしておきますね。
(?:^|[^@]\b)([\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+)(?:\b[^@]|$)
0587nobodyさん03/06/20 01:51ID:???
よくわからん。
ホスト名にマッチするようにしたら、
メールアドレスにマッチするわけないと思うのだが・・・
058858703/06/20 01:53ID:???
あ、いや、そんなことないか。勘違いだ。スマソ
058956503/06/20 07:31ID:???
>>575
レスありがとうございます。
そうですね!
とりあえず、いろんなサイト見て勉強してみます!
0590nobodyさん03/06/20 07:55ID:???
>>589
Perlメモ見てみれば?
0591あぼーんNGNG
あぼーん
0592nobodyさん03/06/21 02:30ID:???
PHPでリンクの置き換えに困ってます。例えば

<a href="../test/read.cgi/mysv/1044358074/115" target="_blank">>>115</a>

で、URL部../test/read.cgi/mysv/1044358074/115と >> より後の数字を不特定で
マッチさせたいのですがどう表記すればよいでしょうか。お願いします。
0593nobodyさん03/06/21 06:56ID:???
>>592
<a href="([^"]+?)" target="_blank">>>(\d{1,3})</a>
みたいな?
0594nobodyさん03/06/21 10:24ID:???
>>593
"は\"に変えましたけどそれでもエラーなります
0595nobodyさん03/06/21 11:57ID:NfKIfdiT
csvの分解ってPerlの正規表現一発でできますか?
aaa,"bbb,ccc",ddd
とかも正しく分解できる奴
059659503/06/21 12:00ID:???
Perlメモにありましたね
失礼
0597nobodyさん03/06/22 03:04ID:pHsSEvkK
PHPの質問スレッドにてこちらのほうがいいと言われましたんでこのスレにきました

ページ内からリンクとリンクを張られた文字を全て取得したいのです
このスレの>>432に似てるのですが、張られた文字も取得したいのです

例えば、<a href="URL">文字列</a>だったら「URL」「文字列」の両方です
自分でもいろいろやってみたのですが、上の例のような形のモノしか取得できません
もう少し、柔軟に取得できるものがいいのですが

preg_match_all ("|<a href=\"([^>]+)\">([^<]+)</a>|U", $contents, $out, PREG_SET_ORDER);

私にはこれが限界です、よろしくお願いします
0598nobodyさん03/06/22 04:17ID:???
PHPじゃないんだが。。。

<a\s[^>]*?href="((https?|ftp):\/\/[-!\#\$%&'()*+,.\/:;=?\@~\w]+)"[^>]*?>([\s\S]+?)<\/a>
059959703/06/22 04:51ID:???
>>598
ありがとうございます。
できれば下のに対応できるくらい柔軟なものってできませんか?


<a href="http://www.aaa.aaa">通常リンク</a>
<A HREF"http://www.aaa.aaa">タグが大文字</a>
<a href=http://www.aaa.aaa>;クォート無し</a>
<a href='http://www.aaa.aaa'>;ダブルクォートの代わりにシングルクォート</a>
<a href="./test.html">省略リンク</a>
<a href="ftp://www.aaa.aaa">ftp通常リンク</a>
<a href="https://www.aaa.aaa">https通常リンク</a>
<a href = "http://www.aaa.aaa">イコールをスペースで囲む</a>
< a href="http://www.aaa.aaa">aをスペースで囲む</a>
<a href="http://www.aaa.aaa" aaa="aaa">他要素がある</a>
<a href="http://www.aaa.aaa"><b>他のタグもリンク</b></a>
<a     href="http://www.aaa.aaa">aとhrefの間が長い</a>

(最後はわかりやすいよう全角スペースにしてます)
0600nobodyさん03/06/22 08:54ID:???
>>599
テストしながら自分で改良しろよ…ヤレヤレ…
0601nobodyさん03/06/22 10:40ID:???
>>599
HTMLの仕様から考えると「考えなくて良い」ものもあるが
それにも対応すると?
0602nobodyさん03/06/22 11:09ID:???
>>599
そういうのは柔軟じゃなく薄弱と言うんだ
0603nobodyさん03/06/22 14:27ID:???
//
/* */
からなるコメント文を消すには、どう書けばいいんですか?
060459703/06/22 16:22ID:???
この道場冷たいなあw
ちょっとくらい稽古つけてくださいよ
こんな感じで頑張ってはいるんですよ

preg_match_all ("/<\s*a\s[^>]*?href\s*=\s*(?:\"|\'|)([-!\#\$%&()*+,.\/:;=?\@~\w]+)(?:\"|\'|)[^>]*?>([\s\S]+?)<\/a>/i",
$contents, $out, PREG_SET_ORDER);
0605nobodyさん03/06/22 18:20ID:???
>>604
「aをスペースで囲む」ってのに対応するのはナンセンスな気がするな。

つーか、正規表現一つで処理せなあかんの?

"#<a[^>]*\shref\s*=\s*(?:\"([^\"]+)\"|'([^']+)'|(\S+))[^>]*>(.+?)</a>#i"
0606nobodyさん03/06/22 18:22ID:???
>>604
お前は相手にされない
060760303/06/22 18:24ID:???
<a href=""> と決め打ちするのはどうして?

<a alt="" href=""> はありえないことが確定してるの?
0608nobodyさん03/06/22 18:29ID:???
<a>にaltはないが、titleとかclassなんかはありえるな。
0609nobodyさん03/06/22 20:57ID:???
[<\s]+a [^>]*href[\s=]+(?:"([^"]+)"|'([^']+)'|([^\s>]+))[^>]*>(.+?)</a>
0610nobodyさん03/06/22 23:44ID:???
<A
    name    =    "    anchor_id    "
    HREF    =    https://www.hogehoge.com/
    target    =    '    _blank    '
>
            ほ    <b>    げ    </b>    ほ    <i>    げ    </i>
</a

>
0611nobodyさん03/06/23 00:44ID:???
以後、この手は放置で。
0612nobodyさん03/06/23 00:48ID:???
駄目だこりゃぁ…

ここは別に最初から最後まで手取り足取り教える為のスレッドじゃないんだよ
>>598 で充分過ぎるほどヒント出てるんだから、自分で「正規表現」を
習得しつつコードを書こうという気は起きないのかい?
061359703/06/23 02:57ID:???
どうせ正規表現をつかって作るのなら柔軟なものを、と思っています。
今まで見てきたHTMLで「文法はおかしいけれどありそうなもの」
「このくらいならありえるかな」ってのを>>599にいくつかピックアップしてみました
ちょっとありえないものもあるかもしれません

万能(に近い)リンク抽出正規表現ってのをつくってみませんか?
>>599のリストに、他にもありえそうなものを追加して……
■ このスレッドは過去ログ倉庫に格納されています