在不同字符上分割PHP字符串

3

我想在不同字符上分割字符串,并且想知道“分隔符”是什么。

例如,字符串可以是:

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

在这些情况下,我希望能够将名称、分隔符和值存储在一个数组中。
array[0]='address';
array[1]='=';
array[2]='test';

分隔符包括=、==、!=、<、>、>=和<=。请问有人知道如何处理这个问题吗?

1
([a-zA-Z]+)(=|==|!=|<|>|>=|<=)([a-zA-Z]+) - erisco
6个回答

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

未经测试但应该可以工作:

$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);
}

您可以通过使用count($result)来测试$result是否有任何内容(分割字符已被找到)。

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

0

试试这个:

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

这里假设你的键和值都是字母数字。希望能对你有所帮助 :)


0

简单粗暴:

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

0

尝试:

$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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接