比方說,我想匹配正則表達式的URL:在Perl
$text = 'http://www.google.com/';
$text =~ /\bhttp:\/\/([^\/]+)/;
print $1; # It prints www.google.com
我想取代它同一個空間,它匹配每個字符的模式。例如,考慮上面的例子,我想結束這段文字:
# http:// /
有沒有簡單的方法來做到這一點?找出匹配圖案有多少個字符,並用相同數量的不同字符替換它?
謝謝。
比方說,我想匹配正則表達式的URL:在Perl
$text = 'http://www.google.com/';
$text =~ /\bhttp:\/\/([^\/]+)/;
print $1; # It prints www.google.com
我想取代它同一個空間,它匹配每個字符的模式。例如,考慮上面的例子,我想結束這段文字:
# http:// /
有沒有簡單的方法來做到這一點?找出匹配圖案有多少個字符,並用相同數量的不同字符替換它?
謝謝。
一種簡單方式是:
$text =~ s!\b(http://)([^/]+)!$1 . " " x length($2)!e;
的正則表達式\b(http://)([^/]+)
字邊界,文字串http://
,以及一個或多個非斜槓字符,在$2
捕獲http://
在$1
和非斜槓字符匹配。 (請注意,我使用!
作爲正則表達式定界符上面,而不是通常/
避免leaning toothpick syndrome。)
在s///
操作者的端部的e
開關將導致該取代$1 . " " x length($2)
爲Perl代碼代替被評估的是解釋爲一個字符串。它因此評估爲$1
,後面跟着$2
中有多少個字母。
**這可能不是正則表達式的工作,而是使用您選擇的語言的現有工具。**正則表達式不是您碰巧涉及到字符串的每個問題的魔術棒。您可能想要使用已經編寫,測試和調試的現有代碼。 在PHP中,使用['parse_url'](http://php.net/manual/en/function.parse-url.php)函數。 Perl:['URI' module](http://search.cpan.org/dist/URI/)。 Ruby:['URI'' module](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html)。 .NET:['Uri'class](http://msdn.microsoft.com/en-us/library/txt7706a.aspx) –
URL是一個例子。我真正需要知道的是如何用模式本身的許多字符替換一個模式。例如,這也可以用來掩蓋信用卡號碼或類似的東西(xxxxxxxxxxxx1234)。謝謝您的意見。 – calvillo