正则表达式以匹配并提取长域

时间:2018-07-31 07:52:48

标签: python regex

我想匹配并提取一个域名。我有以下代码行:

<?php

echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
<!DOCTYPE html   PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR">
<head>
    <script   src="https://code.jquery.com/jquery-1.6.2.js" ></script>

</head>
<body>
<form id="form_ses10_rech" name="form_ses10_rech" action="index.phpp......." method="post">
    <input type="text" name="nom" value="">
    <input type="text" name="prenom" value="">
    <input type="submit" name="subm" value="Envoyer">
</form>


<script>
    $(document).ready(function(){
        $('#form_ses10_rech').submit(function(e){
           // e.preventDefault();
            $.ajax({
                url: 'test.php',
                type: 'POST',
                data: jQuery('#form_ses10_rech').serialize(),
                success: function (data) {
                    console.log(data);
                },
                error: function (error) {
                    console.log(error);
                }
            });
        });
    });

</script>
</body>
</html>

它对于result = re.findall(r"(^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$)", text) example.org之类的域来说效果很好。但这不适用于example.org.eu之类的域。

1 个答案:

答案 0 :(得分:2)

扩展和修剪模式,您可以用来匹配第三种类型的字符串的模式是

^(?:(?:xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]?\.)+(?:xn--)?(?:[a-z0-9-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$

请参见regex demo

主要要点是,我用一个(?:xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]?\.(一个或多个重复项)将+部分包裹在一起,并进行了量化。

请注意,当我删除所有捕获组时,可以直接将其与re.findall一起使用,因此您无需在括号中加上它。

您不需要第一个(?!-),因为下一个使用模式与连字符不匹配,因此我将其删除。

详细信息

  • ^-字符串的开头
  • (?:(?:xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]?\.)+-1个或多个序列
    • (?:xn--)?-可选的xn--子字符串
    • [a-z0-9]-小写的ASCII字母或数字
    • [a-z0-9-_]{0,61}-0到61个小写ASCII字母,数字,-_
    • [a-z0-9]?-可选的小写ASCII字母或数字
    • \.-一个点
  • (?:xn--)?-可选的xn--字符串
  • (?:[a-z0-9-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})-两种选择之一:
    • [a-z0-9-]{1,61}-1至61个小写ASCII字母,-或数字
    • |-或
    • [a-z0-9-]{1,30}\.[a-z]{2,}-1至30个小写ASCII字母,-或数字,一个点和两个小写ASCII字母
  • $-字符串的结尾。