如何匹配perl中的确切字符串

如何解决如何匹配perl中的确切字符串

我正在尝试解析所有文件并验证是否有任何文件内容包含字符串 TESTDIR or TEST_DIR

文件内容可能类似于:-

TESTDIR = foo 
include $(TESTDIR)/chop.mk
...
TEST_DIR := goldimage
MAKE_TESTDIR = var_make
NEW_TEST_DIR = tesing_var

实际上我只对 TESTDIR,$(TESTDIR),TEST_DIR 感兴趣,但就我而言,应该忽略最后两行。我是 perl 的新手,谁能帮我解决 re-rex。

解决方法

/\bTEST_?DIR\b/
  • \b 表示“单词边界”,即单词字符和非单词字符之间的位置。这里的“单词”具有 Perl 的含义:它包含字符、数字和下划线。
  • _? 表示“无或下划线”
,

看看“字符集”。

只允许 (空格)周围:

/^(.* )?TEST_?DIR /
  • ^ 行首
  • (.* )? 可能有一些内容 .* 但如果,它必须后跟一个空格
  • 并说那里必须有一个空格。否则在最后使用 ( .*)?$

允许使用给定字符集之一:

如果是其他字符,则可以使用空格,您可以使用字符类[]

/^(.*[ \t(])?TEST_?DIR[) :=]/
    (.*[ \t(])? 前面的
  • TEST_?DIR 可能是一个 (空格)一个 \t(制表符) strong> ( 如果行以自身开头,则什么都没有。
  • 之后必须 (空格) : =之一 )。后跟任何东西(“任何东西”属于“:=”的“=”......)。

允许给定组中的一个:

因此您需要在 () 内的组,其中每个可能的组由 | 分隔:

/^(.*( |\t))?TEST_?DIR( | := | = )/
  • 在本例中,开头没有更改为 [ \t],因为每个组仅包含一个字符 \t
  • 最后必须有 (单个空格)or :=(':=' 被空格包围)or { {1}}('=' 被空格包围),后面跟着任何东西...

您可以使用任意组合...

=

Debuggex.com 上测试。 (使用'PCRE')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?