2011-01-24 10 views
1

私はpreg_matchまたは非難されていない同様の関数では良くありません。preg_matchまたは類似した文字列から値を取得する

を数1の例では、値を取得する方法:私は見つけることでしょう

  1. /Cluster-Computers-c-10.html

  2. /Mega-Clusters-c-15_32.html

:ここ

は2つの文字列であります-c-との間(この例の値は10です)。値は、-c-.htmlとの間の値を取得する方法(この例では値が15_32ある)は常に数2例で

(数値)の整数です。値は常に整数で区切ります_

基本的には、文字列にc-10.htmlまたはc-15_32.htmlのいずれかが含まれているかどうかをチェックして値を取得し、データベースに渡します。

答えて

3

preg_match('/-c-(\d+(?:_\d+)?)\.html$/i',$str); 

説明:

-c-  : A literal -c- 
(  : Beginning of capturing group 
\d+ : one or more digits, that is a number 
(?: : Beginning of a non-capturing group 
    _\d+ : _ followed by a number 
)  : End of non-capturing group 
?  : Makes the last group optional 
)  : End of capturing group 
\.  : . is a metacharacter to match any char (expect newline) to match 
      a literal . you need to escape it. 
html : a literal html 
$  : End anchor. Without it the above pattern will match any part 
      of the input string not just the end. 

See it

+0

ありがとうございます。私は、URL文字列がmydomain.com/Cluster-Computers-c-10.html?action=blah – Adil

+0

のようなパラメータを持っているかどうかを確認したかっただけです。$ matchesは常に2つの文字列を持つ配列を持つことを確認したかったのですか?それともこれまでに2つよりも少なくてもかまいませんか?私は$ path = $ matches [1]を割り当てる必要があるので私は尋ねています。常に同じになるようにしたいと考えています。 – Adil

3
preg_match('~-c-(.*?)\.html$~', $str, $matches) 
var_dump($matches); 
+0

感謝。私は、URL文字列がmydomain.com/Cluster-Computers-c-10.html?action=blah – Adil

+0

のようなパラメータを持っていることを確認したかっただけです。また、$ matchesは常に2文字列の配列を持つことを確認したかったのですか?それともこれまでに2つよりも少なくてもかまいませんか?私は$ path = $ matches [1]を割り当てる必要があるので私は尋ねています。常に同じになるようにしたいと考えています。 – Adil

+0

@Eddy:0または2の項目があります。 0 - 何もマッチしなかったとき、2 - 何かがマッチしたとき。だから 'if(isset($ matches [1])){$ path = ...; } else {nothing matched} ' – zerkms

1
/-c-(\d+(?:_\d+)?)\.html$/i 
-c-

それはラインの終わりと一致するように-C-
(\d+(?:_\d+)?)一致数または数下線番号
\.html期間及び末尾のHTML
$力のためのルック
i大文字と小文字を区別しない一致

例:

<?php 
    header('Content-Type: text/plain'); 
    $t = Array(
    '1) /Cluster-Computers-c-10.html', 
    '2) /Mega-Clusters-c-15_32.html' 
); 
    foreach ($t as $test){ 
    $_ = null; 
    if (preg_match('/-c-(\d+(?:_\d+)?)\.html$/i',$test,$_)) 
     var_dump($_); 
    echo "\r\n"; 
    } 
?> 

出力:

array(2) { 
    [0]=> 
    string(10) "-c-10.html" 
    [1]=> 
    string(2) "10" 
} 

array(2) { 
    [0]=> 
    string(13) "-c-15_32.html" 
    [1]=> 
    string(5) "15_32" 
} 

ワーキングコード:あなたが行うことができますhttp://www.ideone.com/B70AQ

0

私が見る最も簡単な方法は、次のようになります。そのため

preg_match('/-c-([^.]+)\.html/i', $url, $matches); 
var_dump($matches); 
+0

'[]'の '.'はエスケープする必要はありません。 – zerkms

+0

それを知らなかった。ありがとう! :D –

関連する問題