Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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,我有一个正则表达式 但是这个正则表达式与“/test/”匹配,而不仅仅是test。我做错了什么?您需要使用lookaround断言 (?<=\/)[^\/]*(?=\/[^\/]*$) 代码的问题是,开始和结束斜杠是捕获组的一部分 文本:/1/2/test/ 正则表达式:/\/(\[^\/\]*?)(?=\/)/g 捕获三个列表:“1”、“2”、“测试” 您使用的语言会影响结果。例如,JavaScript可能没有特定的lookarounds,或者可能实际上捕获了非捕获组中的某些内容

我有一个正则表达式


但是这个正则表达式与“
/test/
”匹配,而不仅仅是
test
。我做错了什么?

您需要使用lookaround断言

(?<=\/)[^\/]*(?=\/[^\/]*$)

代码的问题是,开始和结束斜杠是捕获组的一部分

  • 文本:
    /1/2/test/
  • 正则表达式:
    /\/(\[^\/\]*?)(?=\/)/g
  • 捕获三个列表:“1”、“2”、“测试”
  • 您使用的语言会影响结果。例如,JavaScript可能没有特定的lookarounds,或者可能实际上捕获了非捕获组中的某些内容。但是,上述操作应按预期进行。在PHP中,所有的
    /
    匹配字符都必须转义(根据regex101.com),这就是为什么没有使用清理器
    [/]
如果您仅在最后一次匹配之后(即,
测试
),则不需要积极的前瞻:

/\/([^\/]*?)\/$/
捷径 匹配:

  • 不是“
    /
    ”的每个字符
    • 在这里找到匹配的。这是通过创建,即:放在括号内完成的
  • 后跟“
    /
    ”,然后是字符串的结尾
    $
  • 代码:

    获取
    组(1)


    更难阅读,只有当你想避开群体时 匹配与以前完全相同,只是现在我们告诉正则表达式引擎在尝试匹配(2)时不要使用字符。这是通过:
    (?=)
    完成的

    代码:


    获取match对象返回的内容。

    什么编程语言?我正在使用python。谢谢@Nboo
    /[/]([^/]*?)[/]$/
    仅用于
    测试
    ;或
    /[/]([^/]*?)(?=[/])/g
    用于
    1
    2
    测试
    。在
    \/
    上使用
    [/]
    的决定是主观的;不管你认为哪个更干净。@vol7ron:在python中不需要转义
    /
    s,因为它不使用模式分隔符。语法:
    regex=r“pattern”
    @Mariano,对了——这就是我的评论(在你上面)想要表达的意思
    (?<=\/)[^\/]*(?=\/[^\/]*$)
    
    \/([^\/]*)\/[^\/]*$
    
    /\/([^\/]*?)\/$/
    
    ([^/]*)/$
    
    [^/]*(?=/$)