【问题标题】:Need Help to Move a pattern to End Of Line需要帮助将图案移动到行尾
【发布时间】:2019-09-28 14:04:49
【问题描述】:

我一直在用 HTML 页面上的正则表达式制作自动 logcat 到 sepolicy 代码。

我的问题是我需要将{ .* }; 移动到行尾,但我找不到如何做到这一点。

一些例子:
allow { read }; recovery rctl_dumpstate_props:file
{ read }; 需要放在行尾。

allow { getattr }; recovery rcgroups:file
{ getattr }; 需要到行尾。

我已经从其他人的其他类似问题中尝试了多个正则表达式 像 ^(.*)( {.*?};)(.*)$ 并替换 \1\3\2 但我得到这样的输出(奇怪的方块):

而不是我需要的代码。 我需要它是 PCRE (PHP)。谢谢!

【问题讨论】:

  • 通常情况下,您应该捕获组并交换他们的位置。 https://regexone.com/lesson/capturing_groups。看https://regex101.com/r/idMy0w/3
  • 你试过什么?什么没用?你得到了什么?你期待什么?
  • 我试过搜索:((\w+)_(\w+)) 替换:\3、\2、\1 并浏览了整个stackoverflow,但没有任何答案
  • 您使用什么语言/工具?并edit your question 向我们展示您尝试过的内容,在 之前使用字符串替换。
  • 好的,我会编辑

标签: php regex pcre


【解决方案1】:

我猜你没有正确使用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 }; 

【讨论】:

    【解决方案2】:

    这适用于 Python3 re module,它使用 Perl 正则表达式语法。

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

    您可能需要对空格进行调整,但其要点是捕获 3 个组(前缀、大括号之间的文本和后缀;然后交换它们的位置。

    【讨论】:

    • 我需要在 html 中做 ;_;
    • 你的意思是javascript吗?
    • 没有。 php 基本代码是 logcat = logcat.replace(/regex/gmi, "replace with");
    • logcat = logcat.replace(/regex/gmi, "replace with"); 看起来不像 PHP。当询问与正则表达式相关的问题时,您应该添加一个附加标签,即所使用的语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2020-03-11
    • 2020-07-20
    • 2021-06-28
    • 2011-12-17
    相关资源
    最近更新 更多