Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 如何将内部链接与正则表达式匹配?_Regex - Fatal编程技术网

Regex 如何将内部链接与正则表达式匹配?

Regex 如何将内部链接与正则表达式匹配?,regex,Regex,我正在尝试构建一个正则表达式,它将匹配其中不包含单词“样式表””的每一行,并具有一个“a href”值,该值不以http或www开头 这就是我走了多远,但似乎没有达到我的目的: grep -rin "href=\"\/*\/*\/|^((?!stylesheet).)*$" *.html 目标是抓住这一点: <a href="/api_supplier/"> <a href="/other-internal-link/abc/"> 此正则表达式可以完成以下工作: ^(

我正在尝试构建一个正则表达式,它将匹配其中不包含单词“
样式表”
”的每一行,并具有一个“
a href
”值,该值不以
http
www
开头

这就是我走了多远,但似乎没有达到我的目的:

grep -rin "href=\"\/*\/*\/|^((?!stylesheet).)*$" *.html
目标是抓住这一点:

<a href="/api_supplier/">
<a href="/other-internal-link/abc/">

此正则表达式可以完成以下工作:

^(.*a href)((?!http|www|stylesheet).)*$

此正则表达式可以完成以下工作:

^(.*a href)((?!http|www|stylesheet).)*$

index.html
附加到正确URL的perl方法:

~cat file.txt 
<a href="/api_supplier/">
<a href="/other-internal-link/abc/">

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">

index.html
附加到正确URL的perl方法:

~cat file.txt 
<a href="/api_supplier/">
<a href="/other-internal-link/abc/">

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">


你能给我举个例子吗?你可能想看看这个作业的语法分析器。谢谢,HTML和正则表达式不是好朋友。使用解析器,它更简单、更快、更易于维护。@Toto-Well,在一般情况下当然是正确的;对于这个特定的用例,当然是完全可行的(因为我们可以用“href=”in a value etc)排除病理性案例。您可以给出一个在ITS中使用样式表的行的示例吗?您可能想看看这个作业的解析器,Sure补充道。谢谢,HTML和正则表达式不是好朋友。使用解析器,它更简单、更快、更易于维护。@Toto-Well,在一般情况下当然是正确的;对于这个特定的用例,当然是完全可行的(因为我们可以用“href=”in a value etc)排除病理情况。我对正则表达式的所有风格都不熟悉。例如,grep无论如何都会在单行上工作,因此我假设
^
$
锚定是冗余的(因此
^
后面的
*
)。您是否需要它们(例如在Perl中)?这不适用于:
我认为在使用grep时,^和$的有用性是正确的,但在我看来,.*仍然是必需的。它在这里捕捉“a href”之前的任何内容,这可能只是一个简单的“@Toto-Hum,你什么意思?他不希望在其中包含样式表的行,所以它会像预期的那样被忽略,对吗?不,不会。只有在
href
之后,您才测试是否缺少
steelesheet
,我不熟悉所有类型的正则表达式。例如,grep无论如何都会在单行上工作,因此我假设
^
$
锚定是冗余的(因此
^
后面的
*
)。您是否需要它们(例如在Perl中)?这不适用于:
我认为在使用grep时,^和$的有用性是正确的,但在我看来,.*仍然是必需的。它在这里捕捉“a href”之前的任何内容,这可能只是一个简单的“@Toto-Hum,你什么意思?他不希望在其中包含样式表的行,所以它会像预期的那样被忽略,对吗?不,不会。只有在
href
之后,您才可以测试是否缺少
steelesheet
,这真是太好了,谢谢。如何修改它使其成为一个内联更改?这真的很好,谢谢。如何修改它以使其成为内联更改?
~perl -ape 's~^(?!.*stylesheet).*?\bhref="/[^"]+\K~index.html~' file.txt 
<a href="/api_supplier/index.html">
<a href="/other-internal-link/abc/index.html">

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">
perl -i -ape 's~^(?!.*stylesheet).*?\bhref="/[^"]+\K~index.html~' file.txt