当前位置: 首页 > 知识库问答 >
问题:

如何 Grep 搜索一个字符在外观之间的两次出现

公孙国兴
2023-03-14

我似乎不得不不断地重新学习正则表达式

我需要对 plist/XML 文件中一对标签之间的文本中任意位置的两个文字星号的出现进行多行搜索。

我可以成功构建一个lookbetween,这样:

(?s)(?<=<array>).*?(?=</array>)

我试图将它限制为只匹配标签之间出现两个星号的情况:

(?s)(?<=<array>).*?[*]{2}.*?(?=</array>)
(?s)(?<=<array>).+[*]{2}.+(?=</array>)
(?s)(?<=<array>).+?[*]{2}.+?(?=</array>)

但是他们发现没有。当我删除{2}时,我意识到我甚至没有正确地构造它来查找一个星号的出现。我试图转义字符/*和[/*],但没有用。

我怎么能匹配任何出现的废话*等等等等*等等?

共有2个答案

熊嘉茂
2023-03-14

使用

(?s)(?<=<array>)(?:(?:(?!<\/?array>)[^*])*[*]){2}.*?(?=</array>)

见证明。

说明

雍志新
2023-03-14

[*]{2}表示两个星号必须连续。

(.*[*]){2}就是您要找的-它包含两个星号,中间有任何东西。

但是我们还需要确保正则表达式只同时测试一个标签闭包,所以我们需要使用 ((?!

正则表达式可以写成:

(?s)(?<=<array>)(?:((?!<\/array>).)*?[*]){2}(?1)*

在这里查看测试结果

 类似资料:
  • 我有两个日期搜索字段,即从和到。我必须从用户表中检索记录,其startDate位于搜索字段中输入的from和to日期之间,如果from和to日期为空,我必须从用户表中检索所有记录。 我尝试了以下hql查询: 这里start_标志的类型为int,如果from和to为null,则设置为1。 这里的数据类型是: startDt-java.util.Date endDt-java.util.Date st

  • 问题内容: 我有两个日期搜索字段,即从和到。我必须从用户表中检索其startDate位于在搜索字段中输入的起始和终止日期之间的记录,如果起始和终止日期为null,则必须从用户表中检索所有记录。 我尝试了以下hql查询: 在这里,start_flag的类型为int,如果from和to为null,则将其设置为1。 这里的数据类型是: startDt-java.util.Date endDt- java

  • 问题内容: 我正在寻找一种快速简便的单行代码,以从文本文件中提取所有包含搜索字符串的大括号分隔的文本块。我只是为此而在Google上发疯,但是每个人似乎都只是在发布有关在没有搜索字符串的情况下在大括号之间获取文本的信息。 我有一个大型文本文件,其内容如下: 方括号中的绝大多数条目都不包含搜索字符串,即“事件”。 我要提取的是每组花括号之间的所有文本(尤其是多行匹配),但前提是所述文本还包含搜索字符

  • 问题内容: 假设我们有类似的东西: 我想将“ someText”替换为其他内容。考虑到我不知道someText可能是什么(任何字符串)并且我所知道的是它将被&firstString =和&endString =包围的事实,最佳方法是什么? 编辑:对不起,看起来这还不够清楚。我不知道“ someText”可能是什么,我仅有的信息是它将位于&firstString =和&endString =之间 我

  • 我只想在文本中的两个特定字符之间替换字符的每次出现。

  • 我有一个程序,其中有一个名称列表,输出说明名称出现了多少次,以及单词出现在哪一行。现在,如果一个名字出现两次,它只输出第一个出现的单词的行号。如果名字出现了不止一次,我怎么能让它说出名字在哪一行呢?