PHP разбить строку на разных персонажей - PullRequest
3 голосов
/ 14 июля 2011

Я хочу разбить строку на разные символы и узнать, что такое «сплиттер».

Строка может быть, например:

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

В этих случаях я хочу получить имя, разделитель и значение в массиве.

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

Разделителями являются =, ==,! =, <,>,> =, <=. </p>

Может кто-нибудь сказать мне, чтобы иметь дело с этим?

Ответы [ 6 ]

6 голосов
/ 14 июля 2011
$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 голосов
/ 14 июля 2011

попробуй:

$str = "address=test";
preg_match("/(?<k>.+?)(?<operator>[=|==|!=|<|>|>=|<=]{1,2})(?<v>.+?)/",$str,$match); 
$match["k"] //addres
$match["operator"] //=
$match["v"] //test
0 голосов
/ 14 июля 2011

Попробуйте:

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

Предполагается, что ваши ключи и значения буквенно-цифровые.Надеюсь, это поможет:)

0 голосов
/ 14 июля 2011

Быстро и грязно:

$parts = preg_split('/[<>=!]+/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
0 голосов
/ 14 июля 2011
preg_match('/(\S)(=|==|!=|<|>|>=|<=)(\S)/', $subject, $matches)
0 голосов
/ 14 июля 2011

Не проверено, но должно работать:

$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).

...