Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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/7/python-2.7/5.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 perl正则表达式中的子类何时停止_Regex_Python 2.7_Perl - Fatal编程技术网

Regex perl正则表达式中的子类何时停止

Regex perl正则表达式中的子类何时停止,regex,python-2.7,perl,Regex,Python 2.7,Perl,我试图将一些perl代码翻译成python,但我遇到了一个特定的正则表达式的问题,我就是不知道它是做什么的,或者为什么它会停止 这是正则表达式 $url =~ s/^.*\///; 现在我试着传递一些URL,看看结果如何 这就是结果 # string input "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS" # string output "test.cgi?u=USER&p=PASS" 据我所知,我真的不

我试图将一些perl代码翻译成python,但我遇到了一个特定的正则表达式的问题,我就是不知道它是做什么的,或者为什么它会停止

这是正则表达式

$url =~ s/^.*\///;
现在我试着传递一些URL,看看结果如何

这就是结果

# string input
"http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"

# string output
"test.cgi?u=USER&p=PASS"
据我所知,我真的不知道为什么它会停在
test
上, 它用零替换字符串开头的任何字符 那么为什么它会在测试时停止呢

如果你能帮我用python写一个正则表达式做同样的事情 那太酷了

提前谢谢

我真的不知道为什么它会在“test”处停止,据我所知,它会用零替换字符串开头的任何字符,所以为什么它会在test处停止

因为
\/
是模式的一部分

#            V here
$url =~ s/^.*\///;
如果代码使用了不同的引号分隔符(在Perl中是可能的),则会更清楚。那样的话,这里就不会有危险了

请注意,默认情况下它是贪婪的,因此它将吞噬所有的斜杠,直到最后一个斜杠

您可以在调试模式下使用来了解更多关于regex引擎在引擎罩下的功能

use re 'debug';

my $url = "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS";

$url =~ s{^.*/}{};
这将输出到STDERR

Compiling REx "^.*/"
Final program:
   1: SBOL /^/ (2)
   2: STAR (4)
   3:   REG_ANY (0)
   4: EXACT </> (6)
   6: END (0)
floating "/" at 0..9223372036854775807 (checking floating) anchored(SBOL) minlen 1 
Matching REx "^.*/" against "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"
Intuit: trying to determine minimum start position...
  doing 'check' fbm scan, [0..54] gave 5
  Found floating substr "/" at offset 5 (rx_origin now 0)...
  (multiline anchor test skipped)
Intuit: Successfully guessed: match at offset 0
   0 <> <http://per>         |   0| 1:SBOL /^/(2)
   0 <> <http://per>         |   0| 2:STAR(4)
                             |   0| REG_ANY can match 54 times out of 2147483647...
  31 <org/c> </test.cgi?>    |   1|  4:EXACT </>(6)
  32 <rg/c/> <test.cgi?u>    |   1|  6:END(0)
Match successful!
Freeing REx: "^.*/"
编译REx“^.*/”
最终课程:
1:SBOL/^/(2)
2:星(4)
3:REG_ANY(0)
4:精确(6)
6:完(0)
在0..9223372036854775807(检查浮动)处浮动“/”锚定(SBOL)最小1
匹配REx“^.*/”与”http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"
Intuit:正在尝试确定最小起始位置。。。
正在进行“检查”fbm扫描,[0..54]给出5
在偏移量5(rx_原点现在为0)处发现浮动子字符串“/”。。。
(跳过多线锚测试)
Intuit:已成功猜测:偏移量0处的匹配
0 | 0 | 1:SBOL/^/(2)
0 | 0 | 2:星(4)
|0 | REG| u任何人都可以匹配2147483647中的54次。。。
31 | 1 | 4:准确(6)
32 | 1 | 6:结束(0)
比赛成功!
释放REx:“^.*/”
我真的不知道为什么它会在“test”处停止,据我所知,它会用零替换字符串开头的任何字符,所以为什么它会在test处停止

因为
\/
是模式的一部分

#            V here
$url =~ s/^.*\///;
如果代码使用了不同的引号分隔符(在Perl中是可能的),则会更清楚。那样的话,这里就不会有危险了

请注意,默认情况下它是贪婪的,因此它将吞噬所有的斜杠,直到最后一个斜杠

您可以在调试模式下使用来了解更多关于regex引擎在引擎罩下的功能

use re 'debug';

my $url = "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS";

$url =~ s{^.*/}{};
这将输出到STDERR

Compiling REx "^.*/"
Final program:
   1: SBOL /^/ (2)
   2: STAR (4)
   3:   REG_ANY (0)
   4: EXACT </> (6)
   6: END (0)
floating "/" at 0..9223372036854775807 (checking floating) anchored(SBOL) minlen 1 
Matching REx "^.*/" against "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"
Intuit: trying to determine minimum start position...
  doing 'check' fbm scan, [0..54] gave 5
  Found floating substr "/" at offset 5 (rx_origin now 0)...
  (multiline anchor test skipped)
Intuit: Successfully guessed: match at offset 0
   0 <> <http://per>         |   0| 1:SBOL /^/(2)
   0 <> <http://per>         |   0| 2:STAR(4)
                             |   0| REG_ANY can match 54 times out of 2147483647...
  31 <org/c> </test.cgi?>    |   1|  4:EXACT </>(6)
  32 <rg/c/> <test.cgi?u>    |   1|  6:END(0)
Match successful!
Freeing REx: "^.*/"
编译REx“^.*/”
最终课程:
1:SBOL/^/(2)
2:星(4)
3:REG_ANY(0)
4:精确(6)
6:完(0)
在0..9223372036854775807(检查浮动)处浮动“/”锚定(SBOL)最小1
匹配REx“^.*/”与”http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"
Intuit:正在尝试确定最小起始位置。。。
正在进行“检查”fbm扫描,[0..54]给出5
在偏移量5(rx_原点现在为0)处发现浮动子字符串“/”。。。
(跳过多线锚测试)
Intuit:已成功猜测:偏移量0处的匹配
0 | 0 | 1:SBOL/^/(2)
0 | 0 | 2:星(4)
|0 | REG| u任何人都可以匹配2147483647中的54次。。。
31 | 1 | 4:准确(6)
32 | 1 | 6:结束(0)
比赛成功!
释放REx:“^.*/”

它在最后一个
/
处停止。它在最后一个
/
处停止。我正在尝试将一些perl代码翻译成python。。。如果你能帮我用python编写一个正则表达式,它可以做同样的事情,这会很酷-OP不需要Perl解决方案。实际上,这是一个代码转换请求。@WiktorStribiżew,我不会给出一个。他们没有问如何翻译。他们问它为什么这么做。我正在详细解释。当OP在您引用的最后一个请求中编辑时,我已经写完了我的答案。。。如果你能帮我用python编写一个正则表达式,它可以做同样的事情,这会很酷-OP不需要Perl解决方案。实际上,这是一个代码转换请求。@WiktorStribiżew,我不会给出一个。他们没有问如何翻译。他们问它为什么这么做。我正在详细解释。我已经写完了我的答案,当OP在你引用的最后一个请求中编辑时。