【问题标题】:How i can get PATH from URL with Regex?如何使用正则表达式从 URL 获取 PATH?
【发布时间】:2019-08-31 10:23:19
【问题描述】:

也许有人可以帮助我处理这个正则表达式?

.*\:\/\/(?:www.)?([^\/]+)(\/.+")

我需要从 URL 获取所有路径。我试过了,但我不能只匹配没有引号的路径

https://regex101.com/r/J6nILD/6

【问题讨论】:

  • 这已被多次询问和回答(即重复)。适合你的可能是Getting parts of a URL (Regex)
  • @RonaldAaronson 不幸的是,这个答案不适合我。我正在使用 Jmeter。 Jmeter 不接受这个正则表达式
  • 因此,当使用标签 [regex] 时,指南建议添加一个附加标签,即您正在使用 regex 的编程语言。您可能还会提到根据 Jmeter 的“已接受”正则表达式的问题,以便非 Jmeter 专家的人知道其局限性。
  • @RonaldAaronson 当然

标签: regex jmeter pcre


【解决方案1】:

您可以使用带有 Groovy 代码的 JSR223 Sampler 获取路径。

  1. 声明/获取 URL 变量

  1. 解析该 URL 以获取协议、主机、端口和路径。使用 JSR223 Sampler 并将以下代码粘贴到 Script 区域

    URL url1 = new URL(vars.get('url'));
    
    vars.put('protocol', url1.getProtocol());
    vars.put('host', url1.getHost());
    vars.put('port', url1.getPort() as String);
    vars.put('path', url1.getPath());
    vars.put('query', url1.getQuery());
    
  2. 使用 ${}

  3. 在脚本中的任何位置使用该变量

【讨论】:

  • 我不清楚,因为提出的问题是 OP 有“在手”的 URL,不需要先搜索它。在这种情况下,这显然是使用简单的方法,并且不需要正则表达式。
  • @SAIR 如果我有一个动态 url,这个技巧就无法完成,我通过另一个正则表达式提取器获取它:(
  • @RonaldAaronson 是的,你是对的。我最近一直在使用 Jmeter,因此我不太了解它的功能
  • @twomvlad 你能粘贴动态网址吗?
  • @RonaldAaronson,首先需要他捕获 URL 并将其存储在变量中。这可以通过 N 种方式完成,具体取决于他从哪里获取 URL。之后,这个解决方案就会到位。我还通过声明 URL 变量来展示。
【解决方案2】:

如果您必须先扫描网址:

我试图提供一个简单的正则表达式(过于简化),它可能适用于您的上下文,但您可能需要对其进行修改以提供一些额外的上下文。例如,x 是一个有效路径,这个正则表达式会这样识别它。但是,如果您尝试在诸如<img src="x"> 之类的字符串中查找路径,它也会将img 识别为有效的url 路径。在这种情况下,您可能希望:

/<img\s+src="((https?|ftp):\/\/[^\/]+)?(\/?[^?#\s"]*)/i

var regex = /\b((https?|ftp):\/\/[^\/]+)?(\/?[^?#\s]*)\b/i;
var s = 'http://example.com/a/b?x=1';
var result = regex.exec(s);
console.log(result[3]);

如果 URL 的协议和主机部分始终存在,那么通过使协议和主机不是可选的,在几乎任何上下文中区分 URL 变得更加容易:

/\b((https?|ftp)://[^/]+)(/?[^?#\s]*)\b/i;

【讨论】:

    【解决方案3】:

    你可以选择类似的东西:

    (?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?
    

    演示:

    更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2022-11-18
      • 1970-01-01
      • 2011-02-11
      • 2011-03-27
      相关资源
      最近更新 更多