Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 添加OR时正则表达式模式失败?_Regex_Bash_Shell_Unix - Fatal编程技术网

Regex 添加OR时正则表达式模式失败?

Regex 添加OR时正则表达式模式失败?,regex,bash,shell,unix,Regex,Bash,Shell,Unix,下面的模式非常有效,我得到了数百个结果 xargs pcregrep -M "select.*table(.)*" >> $grep_out 此返回(示例): 将OR添加到最后一个结束字符时,得到0个结果: xargs pcregrep -M "select.*table(.|\n)*" >> $grep_out 这对我来说毫无意义。我正在添加OR-从逻辑上讲,它不应该做任何事情,而是扩展我的搜索,并增加我的结果。不要减少它们。这里发生了什么?因为您使用的是多行,所以

下面的模式非常有效,我得到了数百个结果

xargs pcregrep -M "select.*table(.)*" >> $grep_out
此返回(示例):

将OR添加到最后一个结束字符时,得到0个结果:

xargs pcregrep -M "select.*table(.|\n)*" >> $grep_out

这对我来说毫无意义。我正在添加OR-从逻辑上讲,它不应该做任何事情,而是扩展我的搜索,并增加我的结果。不要减少它们。这里发生了什么?

因为您使用的是多行,所以您将匹配文件中的第一个
选择表
,然后由于
(.\n)*
您将匹配文件的其余部分。请仅注意单个匹配项:

$ pcregrep -M "select.*table(.|\n)*" *
file.txt:call error("Prepare select_table failed.")
declare select_table cursor with hold for sel_table
let prep = " select * from table ",
不过,
组件没有问题

$ pcregrep -M "FOO(\n)" *
file.txt:FOO
file.txt:FOO

$ pcregrep -M "FOO(.)" *
file.txt:FOOF

$ pcregrep -M "FOO(.|\n)" *
file.txt:FOO
file.txt:FOOF
file.txt:FOO

因此,您的问题在其他地方。

请添加样本数据。我无法用您的样本数据重现这一点。使用
bash
4.2.45(1)-release和
pcregrep
8.31进行测试。为什么你总是把星号放在引号之外?我知道它将匹配文件的其余部分-目的是在“(.|\n)”之后放置另一个字符串,但我已将问题缩小到这一点。感谢您尝试帮助测试这一点,但您没有测试所呈现的案例-它位于第二个单词之后。在第一个单词后面加上“(.|\n)”对我也很有用。@user1472747星号在引号之外,因为它正在测试当前目录中的所有文件;这是一个globbing表达式,不是正则表达式的一部分。@user1472747,事实上,我测试了这个例子;这是我回答的第一件事,其中
file.txt
包含要匹配的行。当使用第二个正则表达式进行测试时,它可以工作。
$ pcregrep -M "FOO(\n)" *
file.txt:FOO
file.txt:FOO

$ pcregrep -M "FOO(.)" *
file.txt:FOOF

$ pcregrep -M "FOO(.|\n)" *
file.txt:FOO
file.txt:FOOF
file.txt:FOO