掌握正則表達式語法後,關鍵在於如何在不同語言環境中正確調用。本文對比演示 Perl、PHP、JavaScript 三大主流腳本語言的正則操作差異,以郵箱驗證為統一示例。
operator / regular-expression / string-to-replace / modifiers
m:匹配操作s:替換操作g 全局替換、i 忽略大小寫# 替換首個 geed 為 good
s/geed/good/
# 全局替換 love 為 lust
s/love/lust/g
# 忽略大小寫匹配 JewEL
m/JewEL/i
# 指定匹配對象變量
$flag =~ s/abc/ABC/
#!/usr/bin/perl
print "What's your email address? ";
$email = <>;
chomp($email);
if ($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/) {
print "Your email address is correct!\n";
} else {
print "Please try again!\n";
}
ereg() 函數(PHP 5.3 棄用,建議改用 preg_match())int ereg(string $pattern, string $string)
<?php
$email = 'test@example.com';
if (ereg("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+", $email)) {
echo "Your email address is correct!";
} else {
echo "Please try again!";
}
?>
RegExp 物件與 test() 方法JavaScript 1.2+ 內建 RegExp 物件,test() 返回布林值表示是否匹配。
<html>
<head>
<script language="JavaScript1.2">
<!--
function verifyAddress(obj) {
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
var flag = pattern.test(email);
if (flag) {
alert("Your email address is correct!");
return true;
} else {
alert("Please try again!");
return false;
}
}
// -->
</script>
</head>
<body>
<form onSubmit="return verifyAddress(this);">
<input name="email" type="text">
<input type="submit" value="提交">
</form>
</body>
</html>
| 特性 | Perl | PHP (ereg) | JavaScript |
|---|---|---|---|
| 操作符/函數 | =~ / m// s/// | ereg() / eregi() | RegExp.test() / String.match() |
| 修飾符位置 | 結尾 /g /i | 函數參數或 eregi() 忽略大小寫 | /pattern/gi 字面量 |
| 分組捕獲 | $1 $2... | ereg() 第三參數陣列 | RegExp.$1 或 exec() 返回陣列 |
| 效能特點 | 編譯優化強 | POSIX 正則較慢 | 引擎優化極佳 |
ereg 系列,全面採用 PCRE 函數 preg_match()、preg_replace() 等/pattern/flags 建立 RegExp,避免字串構造器性能損耗filter_var($email, FILTER_VALIDATE_EMAIL))