【问题标题】:Regex Url Check正则表达式 URL 检查
【发布时间】:2011-12-19 21:41:30
【问题描述】:

我遇到了一个简单的正则表达式问题。 我想要做的是检查一个 URL 以查看它是否包含单词 ajax,如果它包含然后匹配 URL。

例如 给定 URL localhost/ajax/image/get 应该匹配并返回 localhost/ajax/image/get

但是 localhost/image/get 不应该匹配。

我对正则表达式有基本的了解,但无法得到任何有用的东西。

有什么建议吗?我敢肯定这是一个非常简单的案例。

我正在使用它来进行 mod 重写规则

模组重写规则是 RewriteRule ^.?\bajax\b.$ ajax.php?url=$1 [PT,L]

请求的网址http://localhost:93/public/ajax/image/

它重定向到 ajax.php 文件,但不保留 url 值。

我有另一条一般规则如下 RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

请求的网址http://localhost:93/public/imgage/get/

当它重定向到 index.php 时,它在 url GET 值中有 /public/image/get/

【问题讨论】:

  • /ajax/ 是否始终是此类请求的根文件夹?
  • 并不总是,只要它是 url 的一部分

标签: java regex apache mod-rewrite


【解决方案1】:

简单的正则表达式。您有多个标签,所以我不太确定您的平台是什么。如果是java:

Pattern regex = Pattern.compile("^.*?\\bajax\\b.*$");

一般来说这应该是正则表达式:

   /^.*?\bajax\b.*$/

说明:

"^" +       // Assert position at the beginning of the string
"." +       // Match any single character that is not a line break character
   "*?" +      // Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
"\\b" +      // Assert position at a word boundary
"ajax" +    // Match the characters “ajax” literally
"\\b" +      // Assert position at a word boundary
"." +       // Match any single character that is not a line break character
   "*" +       // Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
"$"         // Assert position at the end of the string (or before the line break at the end of the string, if any)

最后我建议this 进一步阅读。

【讨论】:

  • 嗨,感谢您的帮助,这是我正在尝试的正则表达式之一,我希望它能够工作。但是,使用 netbeans 插件来测试正则表达式和 Apache mod_rewrite URL,我将在其中放置规则似乎都不匹配。我有 4 个标签,因为我必须有 4 个标签才能提出问题。我将发布我的 mod_rewrite 规则和我点击的网址
【解决方案2】:

我解决了这个问题,我正在寻找的正则表达式是 ^(.ajax.)$

我一直在尝试 ^(ajax)$ 但这没有意义。

感谢您的帮助

【讨论】:

    【解决方案3】:

    怎么样

    [a-z/]*ajax[a-z/]*
    

    它可能需要一些改进,所以如果需要改进,请告诉我。

    【讨论】:

    • 我不认为这会匹配,因为我认为它不会匹配 http:// 部分。我已经尝试过了,但它无法匹配
    • xxxx:// 部分会一直存在吗?如果是这样,请尝试 [a-z]+://[a-z._/-]*ajax[a-z._/-]*
    【解决方案4】:

    应该很简单:

    Pattern.matches(regex, str)
    

    所以

    Pattern.matches("ajax", str)

    其中str是传入的url字符串。

    【讨论】:

    • 嗨保罗,我在 mod rewrite 中使用它,因为我正在测试 netbeans 插件中的正则表达式,我需要在我将 java 作为标签的问题上放置 4 个标签.额外说明见上文
    • @Paul 这也将匹配 blajaxbla
    • @failedDev 如果您使用“ajax”,则不会。
    • @Paul 这就是重点,您可以使用 blajax。这匹配,但不应该匹配。
    • @failed dev,他改变了他的问题并且在他的原始问题中没有 blaajaxbla,但是在 blaaajaxbla 之后没有句号,所以在这种情况下不会被接受。
    猜你喜欢
    • 2015-03-12
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多