Фраза php-строки с использованием предопределенного шаблона - PullRequest
2 голосов
/ 21 февраля 2012

Мне нужно фраза php-строк и "разбить" ее на 3 переменные на основе шаблона.

Я пытался сделать это с помощью функции explode, однако это немного грязно.

    list($name, $role) = explode(' (', $value);
    list($firstName, $lastName) = explode(' ', $name);

Например, у меня есть следующие строки:

$str_1 = "Jane Joe (Team 1)";
$str_2 = "John Joe (Bank)";

Мне нужно извлечь first_name, last_name и role, что является строкой в ​​скобках.

Я также пытался использовать регулярные выражения, но я немного устал от регулярных выражений

Ответы [ 5 ]

2 голосов
/ 21 февраля 2012

Вы можете попробовать использовать Регулярное выражение, чтобы получить следующие части входной строки:

Функция PHP preg_match: http://php.net/manual/en/function.preg-match.php

preg_match('~^(.+) (.+)\((.+\))$~', $str_1, $matches);

При таком вызове массив @matches содержит:

  • $ совпадений [0]: вся введенная строка
  • $ совпадений [1]: имя
  • $ совпадений [2]: фамилия
  • $ соответствует [3]: роль

Вы также можете проверить, соответствует ли этот шаблон входной строке:

if(preg_match('^(.+) (.+)\((.+\))$', $str_1, $matches)) {
    // do something with matches here
}
2 голосов
/ 21 февраля 2012

Попробуйте следующее:

$str_1 = "Jane Joe (Team 1)";  
preg_match("/^(\w*)\s?(\w*)\s?\\((.*)\\)$/", $str_1, $matches);  
var_dump($matches);  
2 голосов
/ 21 февраля 2012

Вы можете использовать для этого регулярное выражение (возможно, вам придется поиграть с двумя допустимыми символами первой группировки, ниже разрешены символы слова и дефисы):

$str_1 = "Jane Joe (Team 1)";
$matches = array();
if (preg_match('/([\w-]+) ([\w-]+) \((.*)\)/', $str_1, $matches)) {
    echo $matches[1]; // Jane
    echo $matches[2]; // Joe
    echo $matches[3]; // Team 1
}
1 голос
/ 21 февраля 2012

Хотя я бы сказал, что другой подход будет чище, чем передача чистой строки данных, регулярное выражение, вероятно, достигнет этого за вас.

$strArray = array(
    "Jane Joe (Team 1)",
    "John Joe (Bank)"
);

foreach($strArray as $str) {
    $match = array();
    preg_match("/^\(w*)/", $str, $match);
    $firstName = $match[0];

    preg_match("/\s\(w*)/", $str, $match);
    $lastName = $match[0];

    preg_match("/\((\w)\)/", $str, $match);
    $role = $match[0];
}
1 голос
/ 21 февраля 2012

Просто используйте explode и substr:

list($first_name, $last_name, $role) = explode(" ", "Jane Joe (Team 1)", 3);
$role = substr($role, 1,-1);

var_dump($first_name, $last_name, $role);

Пример: http://ideone.com/Ike0M

Конечно, это предполагает имя и фамилию из 1 слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...