Нужна помощь для перемещения шаблона в конец строки - PullRequest
0 голосов
/ 28 сентября 2019

Я делаю auto logcat для разделения кода с помощью регулярных выражений на странице HTML.

Моя проблема в том, что мне нужно переместить { .* }; в конец строки, и я не смог найти, как это сделатьэто.

Некоторые примеры:allow { read }; recovery rctl_dumpstate_props:fileгде { read }; должен идти до конца строки.

allow { getattr }; recovery rcgroups:fileгде { getattr }; должен идти до конца строки.

Я пробовал несколько ReGex от других подобных проблем от других людей, таких как ^(.*)( {.*?};)(.*)$ и заменил \1\3\2, но я получаю вывод, подобный этому (странные квадраты):

вместо кода, который янужно.Мне нужно, чтобы это был PCRE (PHP).Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Я думаю, вы не используете preg_replace.Попробуйте:

$texts = ['allow { read }; recovery rctl_dumpstate_props:file',
          'allow { getattr }; recovery rcgroups:file'];
foreach ($texts as $str) {
    echo preg_replace('/^(.+?)( { .+? };)(.+)$/', '$1$3$2', $str),"\n";
}

Вывод:

allow recovery rctl_dumpstate_props:file { read }; 
allow recovery rcgroups:file { getattr }; 
0 голосов
/ 28 сентября 2019

Это работает с модулем Python3 re , который использует синтаксис Perl regex.

import re
>>> re.sub('^(.*)( {.*?};)(.*)$', r'\1\3\2', 'allow { read }; recovery rctl_dumpstate_props:file')
'allow recovery rctl_dumpstate_props:file { read };'

Возможно, вам потребуется внести изменения в пробел, но суть в том, что вы захватываете3 группы (префикс, текст между фигурными скобками и суффикс; затем вы меняете их местами.

...