WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:数字のみのマッチング

0:[投稿] みけ [2002/11/14 10:30 ][環境:WIN+IE UNIX系+Perl]

ここで質問していいのか分かりませんが、よろしくお願いします。
--------------------------------------
$a = "http://www.a14.com/index15.htm";

$a =~ /.*(\d+)/;
$b = $1;

print $b;
--------------------------------------
実行結果
15
--------------------------------------
としたいのですが、実行結果が5になってしまいます。
どのようにマッチングの記述をすればいいのでしょう?


1:[回答] 薫 [2002/11/14 11:06 ]

ヒントです。
$a =~ /.*(\d+)/;
の「.*」部分は「数字以外」の必要があるかと思います。


2:[関連] 薫 [2002/11/14 13:47 ]

ここの「其参」あたりが参考になります。
http://www.sixnine.net/regexp/


3:[回答] 箕 [2002/11/14 16:48 ]

$a =~ /(\d+)....$/;


4:[質問] みけ [2002/11/19 18:02 ]

お返事遅れてしまってすいません。

>の「.*」部分は「数字以外」の必要があるかと思います。
$aには数字がいくつか離れて出てくる場合があるので、数字以外という条件を入れてしまうと(「^」を使うということでしょうか)、最初にマッチした14が出力されてしまうような。

>$a =~ /(\d+)....$/;
これは、15の後が4文字の場合しかダメですよね?

ようは$aにはいろいろな文字列(記号も含む)が混在してるなかで、一番後ろにある連続した数字(1桁の場合は1つ)にマッチさせたいのです。
$aには
「das335lkjo)32h<tt?wq351lkjoo」
などなど、いろいろな場合が考えられるということです。

最初の質問で言葉足らずになってしまい申し訳ありません。


5:[回答] andi [2002/11/19 18:13 ]

$a = "http://www.a14.com/index15.htm";
$b = ($a =~ /(\d+)\D+?$/)[0];
print $b;


6:[回答] andi [2002/11/19 18:14 ]

こげん感じでよかでしょうか。


7:[回答] 薫 [2002/11/19 18:31 ]

# (1つ以上の数字)[数字以外]が0回以上 で終わる
$a =~ /(\d+)[^\d]*$/;

# [数字以外]が1つ (1つ以上の数字)/をあるだけ繰り返す
# (=結果的に最後のマッチが残るはず)
$a =~ /[^\d](\d+)/g;

どうでしょう。こんな感じとかも。
2つめはあまりスマートでないような....

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World