Как игнорировать пробелы и возврат каретки в тексте с помощью регулярных выражений

Я новичок в stackoverflow, поэтому я не знаю, задавался ли этот вопрос раньше, но я не могу найти какие-либо прошлые вопросы, которые намекают на ответ. Любая помощь действительно ценится и спасибо заранее.

У меня есть этот текст:

{
   1282837200, -- [1]
   "Type", -- [2]
   "Name", -- [3]
   "Reason", -- [4]
   Amount, -- [5]
  }, -- [1]
  {
   1282838220, -- [1]
   "Type", -- [2]
   "Name", -- [3]
   "Reason", -- [4]
   Amount, -- [5]
  }, -- [2]

Для чего мне нужно создать регулярное выражение и извлечь необходимые данные. Я понимаю, как извлекать данные из исходных файлов с помощью регулярных выражений в PHP, используя исходный текст, в котором нет пробелов или возврата каретки.

Но мне нужна помощь в создании выражения, которое включает пробелы и т. д., включенные в этот источник.


person user415263    schedule 26.08.2010    source источник
comment
Теперь исходный текст опубликован, stackoverflow по существу удалил много пробелов.   -  person user415263    schedule 26.08.2010
comment
Я смущен. если приведенный выше текст является источником, куда вы хотите вставить пробелы? как должен выглядеть вывод?   -  person bcosca    schedule 26.08.2010
comment
что именно вы пытаетесь сопоставить в тексте (какие нужны данные)? Какое регулярное выражение вы пробовали? Может быть проще изменить регулярное выражение, чтобы оно соответствовало нужному тексту, вместо того, чтобы сопоставлять пробелы/новые строки. Например, что-то такое простое, как /[\w\d]+/im, может сделать то, что вы хотите, или, по крайней мере, помочь вам начать.   -  person Jonathan Kuhn    schedule 26.08.2010


Ответы (2)


\s - это символ пробела, который может включать или не включать новые строки, в любом случае для них есть [\r\n], игнорируйте их и все. Вы также можете сказать, что именно вы хотите сделать, или даже опубликовать регулярное выражение, которое у вас есть, чтобы я мог помочь вам, если хотите.

РЕДАКТИРОВАТЬ: я просто предполагаю, что регулярное выражение, которое вы хотите, может быть таким:

/\s*{[\s\n\r]*^\s*(\d+).*[\s\n\r]*^\s*"([^"]+)".*[\s\n\r]*^\s*"([^"]+)".*[\s\n\r]*^\s*"([^"]+)".*[\s\n\r]*^\s*(\w+).*[\s\n\r]*^\s*},.*[\s\n\r]*^/m

Это соответствует одному блоку и игнорирует числа в скобках. Переключатель /m запускает многоканальный режим.

person raveren    schedule 26.08.2010

Если вы пытаетесь просто удалить все пробелы, попробуйте следующее: $string = preg_replace('/\s+/s', '', $string);.

\s+ соответствует одному или нескольким пробелам, табуляциям и символам новой строки. s в /s указывает регулярному выражению просматривать строку целиком, а не по одной строке за раз.

person Tim    schedule 26.08.2010