我想拆分不同字符的字符串,我想知道'拆分器'是什麼。Php在不同的字符上拆分字符串
的字符串可以例如:
"address=test"
"number>20"
"age<=55"
在這種情況下,我想要得到的名稱,分隔符和數組中的值。
array[0]='address';
array[1]='=';
array[2]='test';
的分離器是=,==,!=,<,>,> =,< =。
有誰能告訴我處理這個?
我想拆分不同字符的字符串,我想知道'拆分器'是什麼。Php在不同的字符上拆分字符串
的字符串可以例如:
"address=test"
"number>20"
"age<=55"
在這種情況下,我想要得到的名稱,分隔符和數組中的值。
array[0]='address';
array[1]='=';
array[2]='test';
的分離器是=,==,!=,<,>,> =,< =。
有誰能告訴我處理這個?
$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
將無法被識別。這當然可以改變,以適應您的需求:-)。
嘗試使用preg_match_all –
完美;試了一下,它的工作原理!非常感謝! – Bert
未經測試,但應該工作:
$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)
。
preg_match('/(\S)(=|==|!=|<|>|>=|<=)(\S)/', $subject, $matches)
快速「N髒:
$parts = preg_split('/[<>=!]+/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
試試這個:
list($key, $splitter, $val) = split('[^a-z0-9]+', $str);
echo 'Key: '.$key.'; Splitter: '.$splitter.'; Val: '.$val;
這是假設你的鑰匙和丘壑是字母數字。希望它能幫助:)
嘗試:
$str = "address=test";
preg_match("/(?<k>.+?)(?<operator>[=|==|!=|<|>|>=|<=]{1,2})(?<v>.+?)/",$str,$match);
$match["k"] //addres
$match["operator"] //=
$match["v"] //test
評論:「[= | == |!= | <|> |> = | <=] {1,2}」。這應該等於[=!><|] {1,2}。這可能不是你想要的。您可能想要[=!<>] {1,2}或([= | == |!= | <|> |> = | <=]) – yankee
([A-ZA-Z] +)(!= | == | = | <|> |> = | <=)([A-ZA- Z] +) – erisco