2011-07-13 27 views
3

我想拆分不同字符的字符串,我想知道'拆分器'是什麼。Php在不同的字符上拆分字符串

的字符串可以例如:

"address=test" 
"number>20" 
"age<=55" 

在這種情況下,我想要得到的名稱,分隔符和數組中的值。

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

的分離器是=,==,!=,<,>,> =,< =。

有誰能告訴我處理這個?

+1

([A-ZA-Z] +)(!= | == | = | <|> |> = | <=)([A-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