2015-06-16 2 views
1

Мне нужно удалить не буквенно-цифровые символы из двух строк с помощью PHP.PHP для удаления всех неалфавитных символов между двумя строками

Вход:

имя = "K9 Mk II"

построен = 2015.06.15

имя = "Королева Элиз третьего (КРЗ)"

Ожидаемый результат:

name = "K 9MkII "

построен = 2015.06.15

имя = "QueenEliz3rdHRH"

Мой код:

$contents = file_get_contents("input.txt"); 
$contents = preg_replace('/name=\"[^A-Za-z0-9]\"/', "name=\"\\1\"", $contents); 

Edit: он должен только удалить ненужные символы между имя =" и ". Строка, содержащая built = 2015.06.15 должна оставаться неизменной.

Как всегда, ваша помощь очень ценится.

WTS

+0

Вы должны * никогда * разбора HTML с регулярным выражением. Вместо этого используйте [парсер PHP DOM] (http://simplehtmldom.sourceforge.net/). –

+0

Это не HTML, но спасибо за подсказку. –

+0

Добавлена ​​дополнительная информация, показывающая дополнительный контент, который может содержать файл input.txt. –

ответ

2

Использование preg_replace_callback:

$arr = array('name="K9 Mk. II"','name="Queen Eliz. 3rd (HRH)"'); 
foreach($arr as $str) { 
    $str = preg_replace_callback('/(?<=name=")([^"]+)(?=")/', 
     function ($m) { 
      return preg_replace("/\W+/", "", $m[1]); 
     }, 
     $str); 
    echo $str,"\n"; 
} 

Выход:

name="K9MkII" 
name="QueenEliz3rdHRH" 
+1

Это правильный ответ. Регулярное выражение является более чистым и игнорирует данные, которые вы хотите игнорировать @Wonko [пример] (http://phpfiddle.org/lite/code/5757-64i8) +1 Toto –

+1

@JayBlanchard: Спасибо. – Toto

+0

Отличное решение. Спасибо вам за ваши усилия! Вы, ребята, рок! –

4

Вот шаблон, который вы ищете -

[^name=\w\"] 

Это исключает 'имя =', символов слова и пробелы. Смотрите в действии here

Вы также можете использовать возвращаемое значение вместо фактической замены -

$content = preg_replace('/[^name=\w\"]/', '$1', $content); 

Как '$1' сохранит кавычки, как это необходимо.

+0

Спасибо Джей. Это ОЧЕНЬ близко, но немного агрессивно в устранении не-алфавитов. Я тестировал это на PhpFiddle, используя '$ a = 'built = 2015.06.16 \ nname =" K9 Mk. II "';' и удаленные периоды с "2015.06.16". Мне просто нужно удалить ненужные символы изнутри name = "XXX". –

+0

Ах, поэтому есть дополнительные данные, которые вы не предоставили. –

+1

Да, сэр! Мой плохой, я думал, что у всех здесь есть навыки чтения ума. :) –

0

Вы можете использовать PHP preg_replace_callback() для первого совпадения имен с помощью: /name="([a-z0-9]+)"/i, а затем вызова функции, удаляющей пробелы в каждом матче.

0

$ output = preg_replace ('/ [^ \ da-z]/i', '', $ InputString);



здесь i означает нечувствительность к регистру.

$ InputString - вход, который вы предоставляете.
$ вывода содержит результат, который мы хотим

Смежные вопросы