Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 将正则表达式转换为Sed_Regex_Sed - Fatal编程技术网

Regex 将正则表达式转换为Sed

Regex 将正则表达式转换为Sed,regex,sed,Regex,Sed,我有下面的正则表达式 /http:\/\/([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9\-]+:[a-zA-Z0-9\-]+\/[a-zA-Z]+\.[a-zA-Z]+/g 它标识匹配的URL()。我需要修改它,以便能够在命令行上使用它,以便它打印出结果。所以我把它改成如下 sed -n 's/.*\(http:\/\/\([a-zA-Z0-9\-]+\.\)+[a-zA-Z0-9\-]+:[a-zA-Z0-9\-]+\/[a-zA-Z]+\.[a-zA-Z]+\).*/\1/p

我有下面的正则表达式

/http:\/\/([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9\-]+:[a-zA-Z0-9\-]+\/[a-zA-Z]+\.[a-zA-Z]+/g
它标识匹配的URL()。我需要修改它,以便能够在命令行上使用它,以便它打印出结果。所以我把它改成如下

sed -n 's/.*\(http:\/\/\([a-zA-Z0-9\-]+\.\)+[a-zA-Z0-9\-]+:[a-zA-Z0-9\-]+\/[a-zA-Z]+\.[a-zA-Z]+\).*/\1/p' filename 
(我试图在添加的字符中添加粗体,但无法添加) 有以下几点

sed-n's/*((开头)

\(用于内括号)

)./\1/p文件名(结尾)

然而,当我执行它时,我没有得到任何结果

在处理问题时,习惯使用除/之外的分隔符 网址。它使模式更容易阅读

注意,我对ignorecase使用了
I
修饰符


同样,您也应该将
-r
标志放在sed命令中,因为您的模式需要以特殊的方式处理
+

sed-rn的~.*(http://([a-z0-9\-]+)*[a-z0-9\-]+:[0-9]+\/[a-z0-9]++.[a-z]+]).\1~ip'Filename
是有效的命令。在提供的示例的帮助下(谢谢hjpotler92),我能够找出转义字符不需要应用于某些字符。在使用-r选项时,您必须了解何时以及如何应用它。

您可以通过以下方式通过xpath查询来实现这一点:


我喜欢我不知道的“我”。Regex似乎可以在misses之外工作,我理解这一点。原样;我有192根火柴。我得看看这是怎么回事。这就是添加到表达式中的全部内容。新表达式返回0次点击。@user68650忽略模式中的
?:
。它是从我的测试用例中继承下来的。我也在上面删除了它,我必须按照提供的指导重新开始-当我应用时,上面的示例不起作用-当应用escpare sewquence时,r与ans有关。所以我必须测试每一个。这是工作命令--sed-rn的~.*(http://([a-z0-9\-]+)*[a-z0-9\-]+:[0-9]+\/[a-z0-9]+.[a-z]+).-\1~ip'文件名,并发布一些可测试的示例输入和预期的输出。另外,您不需要在括号表达式的开头或结尾转义
-
,您应该使用POSIX字符类而不是硬编码字符范围(依赖于区域设置),因此您的regexp应该是
/http:\/\/([[:alnum:]-]+[:alnum:]-+:[:alnum:]+\/[:alnum:]-]+\[:alpha:]+\[:alpha:]]+/g
,注意
+
需要ERE,因此sed需要
-r
标志或转义每个
+
\+
sed -r -n 's~.*\(http://\([a-z0-9\-]+\.\)+[a-z0-9\-]+:[a-z0-9\-]+/[a-z]+\.[a-z]+\).*~\1~ip' file
xidel file.html -e '//a/@href[fn:matches(.,"http://[^/]*:")]/fn:substring-after(.,"=")'