Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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
Python正则表达式与PHP正则表达式_Php_Python_Regex - Fatal编程技术网

Python正则表达式与PHP正则表达式

Python正则表达式与PHP正则表达式,php,python,regex,Php,Python,Regex,这不是竞争,而是我试图找出为什么某个正则表达式在一个正则表达式中有效,而在另一个正则表达式中无效 (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 那是我的正则表达式,我正试着在上面运行它 127.255.0.0 使用Pytho

这不是竞争,而是我试图找出为什么某个正则表达式在一个正则表达式中有效,而在另一个正则表达式中无效

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
那是我的正则表达式,我正试着在上面运行它

127.255.0.0
使用Pythons regex我什么也得不到,使用PHP我匹配它,下面是我正在进行的两个调用(以防万一这与此有关)。本质上,我试图弄清楚为什么它在PHP中工作,而不是Python

re.findall(regex, string)
preg_match_all($regex, $string, $matches);


找到了解决方案,这是由于我反复查看结果的方式,这个正则表达式将结果分成了几个组,然后它不想以相同的方式打印出来等等。谢谢大家的帮助,非常感谢。

这对我很有效。你一定做错了什么

>>> re.match(r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', '127.255.0.0').groups()
('127', '255', '0', '0')

不要忘记使用原始字符串转义正则表达式:
r'regex_here'

中所述,正则表达式在此处匹配,不知道您做错了什么:

>>> import re
>>> x = re.compile(r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|'
... r'2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]'
... r'[0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)')
>>> x.match("127.0.0.1")
<_sre.SRE_Match object at 0x5a8860>
>>> x.match("127.255.0.1")
<_sre.SRE_Match object at 0x5a8910>
>>> x.match("127.255.0.0")
<_sre.SRE_Match object at 0x5a8860>
>>重新导入
>>>x=重新编译(r'(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\(25[0-5]|'
…r'2[0-4][0-9]|[01]?[0-9][0-9]?\(25[0-5]| 2[0-4][0-9]|[01]?[0-9]'
…r'[0-9]?)\(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)
>>>x.match(“127.0.0.1”)
>>>x.match(“127.255.0.1”)
>>>x.match(“127.255.0.0”)

请注意,
preg\u match
在Python中转换为
re.search
,而不是
re.match
re.match对于词法分析非常有用,因为它是锚定的。

使用3种不同风格的正则表达式,而python只使用一种。我不使用python编写代码,所以我没有就它如何使用正则表达式发表任何专家意见。这是一本很棒的书,就像他们的大多数作品一样。

我建议使用正则表达式进行十进制范围验证不一定是这个问题的正确答案。这更具可读性:

def valid_ip(s):
    m = re.match(r"(\d+)\.(\d+)\.(\d+)\.(\d+)$", s)
    if m is None:
        return False
    parts = [int(m.group(1+x)) for x in range(4)]
    if max(parts) > 255:
        return False
    return True

如果没有进一步的细节,我猜这是某种形式的逃避。PHP和python的正则表达式对象都将字符串作为参数。这些字符串将在传递给正则表达式引擎之前由语言转义

在处理正则表达式时,我总是使用Python的“原始”字符串格式。它确保“

仅仅因为你可以用正则表达式来做,并不意味着你应该这样做。最好编写如下指令:在句点上拆分字符串,确保每个组都是数字并且在一定的数字范围内


如果您想使用正则表达式,只需验证它是否“看起来”像一个IP地址,就像Greg的正则表达式一样。

在使用正则表达式时,使用一个好的工具总是让事情变得更简单。这两个在线测试人员应该允许您输入相同的输入并进行比较:PHP regex()和Python regex()。
r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'