Использование регулярных выражений для вставки пробела в строку в php - PullRequest
2 голосов
/ 25 сентября 2011

У меня есть строка, которая сформирована неправильно и пытаюсь ее исправить.Пример строки: -

A Кто-то (США) B Никто (США)

Я пытаюсь исправить это следующим образом: -

A Кто-то (США) B Никто (США)

Я использую приведенный ниже код для сопоставления ")", за которым следует заглавная буква, а функция php preg_replace выполняет сопоставление и добавляеткосмос.Однако я полностью отброшен на регулярные выражения и не могу добавить пространство в нужном месте.

$regex = "([\)][A-Z])";
$replacement = ") $0";
    $str = preg_replace($regex, $replacement, $output);

Кто-нибудь может предложить лучший метод?Я понимаю, что пространство не добавляет корректность, потому что $ 0 содержит данные, которые я сопоставляю, есть ли способ манипулировать $ 0?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011
$str = preg_replace('/(?<=\))(?=\p{Lu})/u', ' ', $output);

вставляет пробел между закрывающей скобкой (\)) и заглавной буквой (\p{Lu}).Вам вообще не нужно $0 (или $1 и т. Д.), Поскольку вы просто вставляете что-то в позиции между двумя символами, и это регулярное выражение точно соответствует этой позиции (нулевой ширины).Ознакомьтесь с дополнительными утверждениями .

0 голосов
/ 25 сентября 2011

как насчет регулярных выражений = "(?<=\))[A-Z]"
и замены = " $0"

...