убрать числа из начала строки в строке с помощью PHP - PullRequest
3 голосов
/ 01 марта 2011

У меня есть несколько строк в php, которые выглядят так:

10 NE HARRISBURG
4 E HASWELL
2 SE OAKLEY
6 SE REDBIRD
PROVO
6 W EADS
21 N HARRISON

Мне нужно удалить цифры и буквы перед названиями городов.Проблема, которую я имею, состоит в том, что это сильно варьируется от города к городу.Данные почти никогда не совпадают.Можно ли удалить эти данные и сохранить их в отдельной строке?

Ответы [ 4 ]

6 голосов
/ 01 марта 2011

Проверьте регулярные выражения и preg_replace . $nameOfCity = preg_replace("/^\d+\s+\w{1,2}\s+/", "", $source);

Разъяснения:

  1. ^ соответствует началу строки
  2. \d+\s+ начинается с одного или нескольких чисел, за которыми следуют один или несколько пробелов
  3. \w{1,2}\s+ тогда должны быть одна или две буквы, за которыми следуют один или несколько символов пробела
  4. Остальная часть строки должна быть названием города.

Случаи, не покрытые

  • Если перед названием города есть только текстовый классификатор
  • Если перед названием города стоит только числовой квалификатор
  • Если есть только квалификатор числа и название города, оно состоит из двух букв.

Если вы хотите быть более точным, я предполагаю, что вы можете перечислить все возможные буквы перед названием города (S|SE|E|NE|N|NW|W|SW) вместо того, чтобы сопоставлять любые одно- или двухбуквенные строки.

1 голос
/ 01 марта 2011

Если вы хотите получить список городов в виде массива, попробуйте:

if(preg_match_all("/(\w+$)/", $source, $_matches)) {
  $cities = $_matches[1];
}
1 голос
/ 01 марта 2011

Проверьте, работает ли для вас следующее:

$new_str = preg_replace('/^([0-9]* \w+ )?(.*)$/', '$2', $str);
1 голос
/ 01 марта 2011

Для каждой строки, попробуйте это:

$arr = preg_split('/ /', $line);

if(count($arr) === 3)
{
    // $arr[0] is the number
    // $arr[1] is the letter
    // $arr[2] is your city
}
else
{
    // Like "PROVO" no number, no letter
}

Да, этот код просто, но он работает ... И он хранит все ваши данные.Важно использовать preg_split, а не устаревший split метод.

...