Удаление новых строк и вкладок после регулярных выражений - PullRequest
1 голос
/ 29 июня 2011

Я выполняю preg_match () для следующего HTML-кода:

HTML-код:

<div class="phone"> 
        (123) 123-1234
    </div> 

Шаблон регулярного выражения:

/<div class="phone">(?<phone>.*?)<\/div>/s

Результат:

[phone] => '
                    (617) 547-6670
      '

Лишние строки и пробелы - это то, от чего я пытаюсь избавиться. Использование опции /sm не влияет на результат. С помощью str_replace("\n",'',$string) избавился от строки, а передние пробелы должны быть \t табуляции. Я избавился от надоедливых вещей с помощью str_replace("\n\t\t\t\t",'',$string), но мне нужно более общее решение.

Как я могу удалить \n и \t независимо от их количества?

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Не уверен, что это то, что вам нужно, но trim() позаботится о пробелах, табуляциях и символах новой строки с каждой стороны строки (но не внутри строки).

http://php.net/manual/en/function.trim.php

обрезка строки (строка $ str [, строка $ charlist])

Эта функция возвращает строку с пробелы с самого начала и конец ул. Без второго параметр, trim () удалит эти символы:

" " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
"\n" (ASCII 10 (0x0A)), a new line (line feed).
"\r" (ASCII 13 (0x0D)), a carriage return.
"\0" (ASCII 0 (0x00)), the NUL-byte.
"\x0B" (ASCII 11 (0x0B)), a vertical tab.

Я понимаю, что это не будет обрабатывать что-то вроде Hello<space><space><space>World, но это может быть то, что вы ищете (за пределами регулярного выражения).

3 голосов
/ 29 июня 2011

Самый простой способ - заполнить часть содержимого регулярным выражением \s*, например, так:

/<div class="phone">\s*(?<phone>.*?)\s*<\/div>/s

Первый \s* потребляет столько пробельных символов, сколько может, останавливаясь, когда видит первый символ в номере телефона. Затем .*? начинает неохотно потреблять символы, останавливаясь на первой позиции, где может совпадать следующая часть регулярного выражения (\s*<\/div>), то есть сразу после последнего символа в телефонном номере.

Имейте в виду, что первый \s* должен быть жадным, а .*? в указанной группе должен не быть жадным, чтобы это работало. Поэтому, если вы начнете испытывать желание сделать все квантификаторы не жадными с опцией /U, сопротивляйтесь ей. Я упоминаю об этом, потому что некоторые люди используют это все свои регулярные выражения, что я считаю плохой практикой. Кроме того, модификатор /s (однострочный) необходим, а модификатор /m (многострочный) - нет.

2 голосов
/ 29 июня 2011

с использованием \s*

\s - это символ пробела, а * означает любое число, включая 0

Но я думаю, вам следует поискать html-парсер, он здесь, вероятнолучшее решение.

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