添加文本的正则表达式替换

发布于 2024-11-06 13:08:30 字数 440 浏览 1 评论 0原文

我正在尝试在我的移动应用程序(用 ruby​​ 编写)中进行链接重写。我希望它能够使用一个正则表达式完成这两个重写:

m.example.com -> www.example.com
m.subd.example.com -> subd.example.com

m\.([a-z\.]*)example\.com

用这个替换最接近的:

$1example.com

这适用于 m.subd.example.com,但不适用于 m.example。 com 因为我的“www”。例外。

我经常这样做,所以我希望它能够非常快,这就是为什么我试图避免使用任何代码,而只是使用一个正则表达式。是否可以?正则表达式有什么我不知道的奇特功能吗?

I'm trying to do link rewriting in my mobile application (written in ruby). I would like it to be able to accomplish both of these rewrites with a single regular expression:

m.example.com -> www.example.com
m.subd.example.com -> subd.example.com

The closest I've gotten replacing this:

m\.([a-z\.]*)example\.com

with this:

$1example.com

This works for the m.subd.example.com but it fails for m.example.com because of my "www." exception.

I do this A LOT so i'd like it to be very fast, which is why I am trying to avoid using any code, just a single regex. Is it possible? Is there a fancy feature of regex that I don't know about?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无名指的心愿 2024-11-13 13:08:30

我试图避免使用任何代码,而只是使用一个正则表达式

正则表达式就是代码。更复杂的正则表达式需要更长的时间来运行。您需要编写一些代码或运行两个正则表达式。

result = subject.gsub(/m\.([a-z.]*)example\.com/, '\1example.com').gsub(/^example\.com/, 'www.example.com')

I am trying to avoid using any code, just a single regex

Regex is code. A more complex regex takes longer to run. You'll need to write some code or run two regexes.

result = subject.gsub(/m\.([a-z.]*)example\.com/, '\1example.com').gsub(/^example\.com/, 'www.example.com')
瑕疵 2024-11-13 13:08:30

我不了解 Ruby,但这里有一个 Perl 脚本,可以完成您给出的示例的工作。或许可以翻译一下。

#!/usr/local/bin/perl
use strict;
use warnings;

my @list = qw/m.example.com m.subd.example.com/;
my $re = qr#^m\.(.*)(example\.com)$#;
foreach(@list) {
  print $_;
  s/$re/($1 || "www.") . $2/e;
  print " -> $_ \n";
}

输出:

m.example.com -> www.example.com 
m.subd.example.com -> subd.example.com 

I don't know Ruby, but here is a Perl script that does the job for the examples you've given. May be it could be translated.

#!/usr/local/bin/perl
use strict;
use warnings;

my @list = qw/m.example.com m.subd.example.com/;
my $re = qr#^m\.(.*)(example\.com)$#;
foreach(@list) {
  print $_;
  s/$re/($1 || "www.") . $2/e;
  print " -> $_ \n";
}

output:

m.example.com -> www.example.com 
m.subd.example.com -> subd.example.com 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文