我想在不同的角色上分割一个字符串,我想知道'splitter'是什么。
String可以是例如:
"address=test"
"number>20"
"age<=55"
在这些情况下,我想获取数组中的名称,分隔符和值。
array[0]='address';
array[1]='=';
array[2]='test';
分隔符是=,==,!=,&lt;,&gt;,&gt; =,&lt; =。
有人能告诉我这个吗?
答案 0 :(得分: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
编辑:此方法使用[^ =!&lt;&gt;]使该方法更倾向于完全失败而不是给出意外结果。意味着foo=bar<3
将无法被识别。当然可以根据您的需要进行更改: - )。
答案 1 :(得分: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)
中是否包含任何内容(找到了拆分字符)。
答案 2 :(得分:0)
preg_match('/(\S)(=|==|!=|<|>|>=|<=)(\S)/', $subject, $matches)
答案 3 :(得分:0)
快点肮脏:
$parts = preg_split('/[<>=!]+/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
答案 4 :(得分:0)
试试这个:
list($key, $splitter, $val) = split('[^a-z0-9]+', $str);
echo 'Key: '.$key.'; Splitter: '.$splitter.'; Val: '.$val;
这假设您的键和值是字母数字。希望它有所帮助:)
答案 5 :(得分:0)
尝试:
$str = "address=test";
preg_match("/(?<k>.+?)(?<operator>[=|==|!=|<|>|>=|<=]{1,2})(?<v>.+?)/",$str,$match);
$match["k"] //addres
$match["operator"] //=
$match["v"] //test