2011-07-13 12 views
3

文字を別の文字に分割したいと思っています。「スプリッタ」が何であるか知りたいと思います。PHPが異なる文字に分割された文字列

文字列は、たとえばことができます。

これらのケースでは
"address=test" 
"number>20" 
"age<=55" 

私は配列内の名前、区切り文字と値を取得したいです。

array[0]='address'; 
array[1]='='; 
array[2]='test'; 

セパレータはある=、==、!=、<、>、> =、< =。

誰もがこれに対処するように教えてもらえますか?

+1

([a-zA-Z]の+)(!= | == | = | <|> |> = | <=)([-はZa - Z] +) – erisco

答えて

6
$strings = array("address=test","number>20","age<=55"); 
foreach($strings as $s) 
{ 
    preg_match('/([^=!<>]+)(=|==|!=|<|>|>=|<=)([^=!<>]+)/', $s, $matches); 
    echo 'Left: ',$matches[1],"\n"; 
    echo 'Seperator: ',$matches[2],"\n"; 
    echo 'Right: ',$matches[3],"\n\n"; 
} 

出力:

Left: address 
Seperator: = 
Right: test 

Left: number 
Seperator: > 
Right: 20 

Left: age 
Seperator: <= 
Right: 55 

編集:使用してこのメ​​ソッド[^ =! <>]は、メソッドが予期せぬ結果を与えることよりも完全に失敗することを好むようにします。 foo=bar<3が認識されないことを意味します。もちろんこれはあなたのニーズに合わせて変更することができます:-)。

+0

試してみてくださいpreg_match_all –

+0

パーフェクト;それを試して、それは動作します!どうもありがとう! – Bert

0
未テスト

が、動作するはずです:

$seps=array('=', '==', '!=', '<', '>', '>=', '<='); 

$lines=array(
    "address=test", 
    "number>20", 
    "age<=55" 
    ); 

foreach ($lines as $line) { 
    $result=array(); 
    foreach ($seps as $sep) { 
     $offset=strpos($line, $sep); 
     if (!($offset===false)) { 
      $result[0]=substr($line, 0, $offset); 
      $result[1]=substr($line, $offset, 1); 
      $result[2]=substr($line, $offset+1); 
     } 
    } 
    print_r($result); 
} 

$resultはそれで何かを持っている場合は、その後、count($result)を使用して(スプリット文字が発見された)をテストすることができます。

0
preg_match('/(\S)(=|==|!=|<|>|>=|<=)(\S)/', $subject, $matches) 
0

クイック「N汚い:

$parts = preg_split('/[<>=!]+/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
0

はこれを試してみてください:

list($key, $splitter, $val) = split('[^a-z0-9]+', $str); 
echo 'Key: '.$key.'; Splitter: '.$splitter.'; Val: '.$val; 

これはあなたの鍵とヴァルスが英数字であることを前提としています。ホープは役立ちます:)

0

試してみてください。

$str = "address=test"; 
preg_match("/(?<k>.+?)(?<operator>[=|==|!=|<|>|>=|<=]{1,2})(?<v>.+?)/",$str,$match); 
$match["k"] //addres 
$match["operator"] //= 
$match["v"] //test 
+0

これを確認してください: "[= | == |!= | <|> |> = | <=] {1,2}"これは[=!><|] {1,2}と等価でなければなりません。それはおそらくあなたが望むものではありません。あなたはおそらく[=!<>] {1,2}か([= | == |!= | <|> |> = <<]) – yankee