如何解决如何匹配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[) :=]/
-
TEST_?DIR
可能是一个\t
(制表符)或 strong>(
或如果行以自身开头,则什么都没有。 - 之后必须是
:
或=
之一或)
。后跟任何东西(“任何东西”属于“:=”的“=”......)。
(.*[ \t(])?
前面的 允许给定组中的一个:
因此您需要在 ()
内的组,其中每个可能的组由 |
分隔:
/^(.*( |\t))?TEST_?DIR( | := | = )/
- 在本例中,开头没有更改为
[ \t]
,因为每个组仅包含一个字符\t
。 - 最后必须有
:=
(':=' 被空格包围)or { {1}}('=' 被空格包围),后面跟着任何东西...
您可以使用任意组合...
=
在 Debuggex.com 上测试。 (使用'PCRE')