我想匹配并提取一个域名。我有以下代码行:
<?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
之类的域。
答案 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字母$
-字符串的结尾。