【问题标题】:Find and replace with regular expression in Notepad++在 Notepad++ 中查找和替换为正则表达式
【发布时间】:2019-03-26 13:16:29
【问题描述】:

目前,我有一个 PHP 函数,它获取 CSV 文件的内容并将其放入一个多维数组,其中包含我使用索引在不同位置打印出来的文本。

一个使用示例是:

$localText[index][pageText][conceptQualityText][$lang];

第一个索引[index] 将是页面的名称。第二个索引[pageText] 将指示它是什么(页面的文本)。第三个索引[conceptQualityText] 表示实际文本是什么。最后一个索引[$lang] 获取所需语言的文本。

所以:

->页面位置

->这是什么

->内容

->应该用什么语言显示。

这在以前的 PHP 版本中运行良好。但是,升级到 7.2,PHP 似乎更加严格了一些。大约 2 年前,当我第一次提出这个解决方案时,我有点绿色,现在知道因为这些索引没有定义为字符串,例如像这样封装在单引号中:['index'],它们符合超全局 (DEFINE) 的符号。那时我没有多想,但现在 PHP 似乎将它们解释为这样(超全局),所以我得到了 x word 是未定义的超全局的错误。

我最初的想法是对我的示例字符串进行搜索和替换:

$localText[index][pageText][conceptQualityText][$lang];

在 Notepad++ 中使用正则表达式功能。

然而,这个例子只是众多例子之一,数组索引的符号基本上是:

$localText[index][index2][index3][$lang];

所以我的问题是:

如何使用 Notepad++ 搜索和替换,使用正则表达式,使我的索引指针变成字符串,而不是充当超全局变量?

例如制作:

$localText[index][index2][index3][$lang];

进入:

$localText['index']['index2']['index3'][$lang];

我需要某种逻辑来检查括号内的内容并用单引号将它们封装起来,除了最后一个索引[$lang]

我试图提供尽可能多的信息,如果需要详细说明,请告诉我。

我尝试引用these docs,但运气不佳。

【问题讨论】:

  • 尝试(?:\G(?!^)|\B\$\w+)\K\[(?!\$\w+])([^][]+)]并替换为['$1']
  • 谢谢@WiktorStribiżew,您的解决方案确实有效(理论上)。但是,我有一些担忧。我需要在很多文件中执行此操作。这将影响括号[ ] 出现的每个实例,对吗?所以我相信使用这个会有“附带”的损害。一种方法是检查它是否以$localText 开头。另一个问题是我已经手动进行了一些更改,现在这将是双引号,例如$localText['index'][''index2''][''index3''][$lang];.
  • 然后使用(?:\G(?!^)|\B\$\w+)\K\[(\w+)]。见regex101.com/r/E2O02P/1
  • 您所说的“附带损害”是什么意思?上面的正则表达式只匹配一个前面没有任何字符字符的$(它不会在oh$var 中匹配),然后将匹配任何[<1+word_chars>] 像一个接一个的子字符串。请在this demo 尝试您的数据,并告知您是否需要。否则,请参阅下面的其他解决方案,尽管我从 Poul 的解决方案中看到了更多潜在的“附带损害”,而 Martin 的解决方案可能真的匹配任何类型的三重括号(在任何位置)。

标签: regex replace notepad++


【解决方案1】:

我找到了解决方案

这个:

查找:\b(localText\[)([a-zA-z0-9_\-]+)(\]\[)([a-zA-z0-9_\-]+)(\]\[)([a-zA-z0-9_\-]+)

替换:$1'$2'$3'$4'$5'$6'

它就像一个魅力。感谢所有花时间提供帮助的人。

【讨论】:

    【解决方案2】:

    您可以使用以下正则表达式进行匹配:

    \[[^'](\w+)[^']\]
    

    正则表达式匹配方括号之间的单词,除非它被引用。

    替换为:

    ['$1']
    

    正则表达式将不匹配最后一个括号,因为它包含一个“$”符号。

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2015-01-11
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多