2011-07-04 5 views
0

は、次の例については、正規表現で私を助けることができます短い私は単語/区切り文字の後に1つの単語/文字列を抽出しようとしていますサイズ次の白 スペース。したがって、上記の例では、(順番に)大、m、39.5となります。正規表現のphpにpreg_replace

アイデア?

クイックアップデート: あなたも

size:$(size) 

または

size: $(size) 

または

size $(size) 
+0

これを抽出するか、置き換える必要がありますか? ['preg_match()'](http://www.php.net/preg_match)や['preg_match_all()']の代わりに['preg_replace()'](http://www.php.net/preg_replace) '](http://www.php.net/preg_match_all)を参照してください。 – binaryLV

+0

私はそれを抽出する必要があります、ありがとう – Marcin

答えて

1
$strings = array(
    'lorem ipsum size large lorem ipsum', 
    'lorem ipsum size m lorem ipsum', 
    'lorem ipsum size 39.5 lorem ipsum ', 
); 
foreach ($strings as $string) { 
    if (preg_match('#\bsize\b\s+(\S+)\s#', $string, $matches)) { 
     echo "<b>Matched '{$string}':</b>\n\n"; 
     print_r($matches); 
    } 
} 

出力:

Matched 'lorem ipsum size large lorem ipsum': 
Array 
(
    [0] => size large 
    [1] => large 
) 

Matched 'lorem ipsum size m lorem ipsum': 
Array 
(
    [0] => size m 
    [1] => m 
) 

Matched 'lorem ipsum size 39.5 lorem ipsum ': 
Array 
(
    [0] => size 39.5 
    [1] => 39.5 
) 

サイズは$matches[1]に格納されます。

+0

偉大なものだが、もしあれば、サイズ:? – Marcin

+1

「size:large」と同様ですか?パターンとして '#\ bsize \ b:?\ s +(\ S +)\ s# ''を使用すると、' size'の後に ':'オプションが含まれます。私は最後に 'size'と' \ s'の後ろに不要な '\ b'があることに気付きました。単に' '\ bsize:?\ s +(\ S +)# ''だけかもしれません。 – binaryLV

+0

クールだが大きさでは動作しません:大、作業にはスペースが必要です – Marcin

3
if (preg_match('/\bsize\W+(\S+)/', $subject, $regs)) { 
    $result = $regs[1]; 
} else { 
    $result = ""; 
} 

\bsize\W+マッチ01の可能性を含めてください可能性がありに1つ以上の英数字以外の文字(空白、句読点など)が含まれていますが、\bの単語境界アンカーのためにcapsizeと一致しません。

その後(\S+)は、1つ以上の非空白文字にマッチし、最初の後方参照(この場合は$regs[1])でそれらをキャプチャします。

0
preg_match('/\ssize\s+(\S+)/', $string, $matches); 
echo $matches[1]; 
+1

私はそれが動作しないと思う。 PHPはlookbehindアサーション内で無限の繰り返しを許可しません。またはこれは新しいバージョンで変更されていますか? –

+0

@Timあなたは正しいです:) – Karolis