Regexp在问号符号后忽略所有内容

时间:2017-04-06 23:35:54

标签: regex apache url mod-rewrite

这是我试图用正则表达式解析的完整字符串:

example.com/newsite.com.html?var=/newsite.com&var=newsite.com

我希望能够匹配字符串的newsite.com部分,但前提是它不会出现在?符号之后。

目前,我只是到目前为止:

/newsite.com/g

选择newsite.com的所有实例而不是第一个实例。

链接到正则表达式游乐场http://regexr.com/3fmre

修改

此处*代表我想忽略的所有内容,基本上仅匹配第一次出现的newsite.com

example.com/newsite.com.html?****************************

4 个答案:

答案 0 :(得分:2)

您可以使用RewriteCond并仅测试REQUEST_URIQUERY_STRING不属于REQUEST_URI,因此类似于:

RewriteCond %{REQUEST_URI} newsite\.com
RewriteRule your rules if the cond if matched

答案 1 :(得分:0)

您可以使用[^?]这是一个排除组,它匹配除了其中指定的每个符号,在这种情况下为?。例如,表达式/^[^?]*/将匹配从开始到找到?(不会是匹配的一部分)的所有内容。

如果您希望它仅从newsite.com开始匹配,您可以使用/newsite\.com[^?]*/,或者从?结束,您可以使用/[^?]*$/

由于您标记了mod-rewrite,因此您还可以选择使用%{QUERY_STRING}作为条件。查询字符串基本上是我们如何在完整网址中?之后调用的内容。

例如,使用RewriteCond %{QUERY_STRING} newsite.com意味着只有在查询字符串中找到RewriteRule时才会应用此条件后的newsite.com

答案 2 :(得分:0)

这是我提出的解决方案,它不是防弹的,但在很大程度上起作用:

(?<=[^=]\/)newsite\.com

它会忽略任何以=开头并且在开头没有/的内容。

请注意,这仅适用于支持&#34;正面观察&#34;的正则表达式实现。

答案 3 :(得分:-1)

以下是两种方法..

        var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
 //1. Look for ? and get the substring from 0 to the foundAt value
        var foundAt = str.indexOf('?');
            document.getElementById("substr").innerHTML = str.substr(0,foundAt);
            
//2. Using regex find the location of occurence of newsite.com and ignore rest          
 var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
    var loc = str.search(/newsite\.com[^?]*/);
    document.getElementById("substr").innerHTML = loc;
    <p id="substr"></p>