1

私は一生、文字間で文字を抽出する方法を理解できないようです。

この文字列を考えてみましょう。

  $string = "sometext/#a=10/#b=25/moretext";

私がやりたいのは、「a」と「b」の値(10と25)を抽出することです

したがって、基本的に私がやりたいことは、「#a =」を見つけて、次の / の前にすべてを取得し、b に対して同じことを行うことです。これをどのように達成できるか教えてもらえますか?

また、誰かが推奨できる堅実な正規表現チュートリアルを知っている場合は、私はそれを非常に感謝しています。ありがとうございました。

4

2 に答える 2

4

これは私のために働く:

<?php

$string = "sometext/#a=10/#b=25/moretext/#varname=Hello World/evenmoretext/";

$matchcount = preg_match_all('@#([^=]+)=([^/]*)/@', $string, $matches);

for ($i = 0; $i < $matchcount; ++$i) {
    echo "{$matches[1][$i]} = {$matches[2][$i]}\n";
}

出力:

a = 10
b = 25
varname = Hello World

ずいぶん前にhttp://www.regular-expressions.info/というサイトが役に立ち、良い情報が載っていました。正規表現をテストするための GUI プログラムは、式を入力するとリアルタイムで一致を表示できるため、役立つ場合があります。頭に浮かぶ例は Regex Buddy ですが、これにはお金がかかります。このオンライン正規表現テスターもかなり有望に見えました。

于 2012-05-31T23:44:18.983 に答える
3
$string = "sometext/#a=10/#b=25/moretext";
$expr = '@#([a-z]+)=(.+?)/@';
$count = preg_match_all($expr, $string, $matches);

$result = array();
for ($i = 0; $i < $count; $i++) {
    $result[$matches[1][$i]] = $matches[2][$i];
}

echo "<pre>";
print_r($result);
echo "</pre>";

動いているのを見る

正規表現の基本を本当に理解したいのであれば、私がお勧めできる最良のリソースはhttp://www.regular-expressions.info/です。

于 2012-05-31T23:47:42.550 に答える