1

我试图让它与 perl 的正则表达式一起使用,但似乎无法弄清楚.. 我想获取任何具有“.website”的 url。在其中,除了像这样的(在“.website.”之前有“en”)

   $linkhtml =  'http://en.search.website.com/?q=beach&' ;

这是我希望由正则表达式返回的 url 示例,而上面的那个被拒绝

   $linkhtml =  ' http://exsample.website.com/?q=beach&' ;

这是我的尝试.. 对我做错的任何建议表示赞赏

   $re2='(?<!en)'; # Any number of characters
   $re4='(.*)'; # Any number of characters
   $re6='(\.)'; # Any Single Character 4
   $re7='(website)'; # Word 2
   $re8='(\.)'; # Any Single Character 5
   $re9='(.*)'; # Any number of characters

   $re=$re4.$re2.$re6.$re7.$re8.$re9;

   if ($linkhtml =~ /$re/)
4

3 回答 3

1

我只需分两步完成:首先使用通用正则表达式来检查任何 URL(或者更确切地说,任何看起来像 URL 的东西)。然后检查每个匹配的结果与另一个en在主机 before中查找的正则表达式匹配wordpress,并丢弃任何匹配的结果。

于 2010-07-16T19:59:05.223 回答
1

如果您在断言之后尝试匹配的内容过于笼统以至于它会匹配断言本身,那么否定的后向断言就不能很好地工作。考虑:

perl -wle'print "en.website" =~ qr/(?<!en\.)web/'        # doesn't match
perl -wle'print "en.website" =~ qr/(?<!en\.)[a-z]/'      # does match, because [a-z] is matching the 'en'

这里最好的做法是 David 建议的:使用两种模式来筛选出好的和坏的值:

my @matches = grep {
     /$pattern1/ and not /$pattern2/
} @strings;

...其中 pattern1 匹配所有 URL,而 pattern2 仅匹配 'en' URL。

于 2010-07-16T20:34:47.610 回答
0

这是最终的解决方案,以防将来有人遇到正则表达式的新手(就像我一样)并且遇到类似的问题..在我的情况下,我包装了这是一个“for循环”,因此它将通过一个数组但这取决于需要。

首先让我们过滤掉带有“en”的网址,因为这些不是我们想要的网址

        $re1='(.*)';    # Any number of characters
        $re2='(en)';    # Word 1
        $re3='(.*)'; # Any number of characters


        $re=$re1.$re2.$re3;
        if ($linkhtml =~ /$re/)
        {


    #do nothing, as we don't want a link with "en" in it

        }

        else {

        ### find urls with ".website."
        $re1='(.*)';    # Any number of characters
        $re2='(\.)';    # period
        $re3='(website)';   # Word 1
        $re4='(\.)';    # period
        $re5='(.*)'; # Any number of characters


        $re=$re1.$re2.$re3.$re4.$re5;

            if ($linkhtml =~ /$re/) {

            #match to see if it is a link that has ".website." in it


            ## do something with the data as it matches, such as:
                       print "linkhtml

            }

           }
于 2010-07-16T21:12:12.210 回答