0

我正在寻找以下形式的字符串:

作者姓名未知长度的文章标题:some.url

只需将其更改为:

作者姓名未知长度的文章标题:some.url

我尝试了各种可以成功挑选文章标题的选项,例如

(^.*?by)

并将用我想要的任何东西替换它。例如,如果我说

replace [(^.*?by)] with [test title]

以上变为:

作者姓名的测试标题:some.url

但是,每当我尝试用 \U$1 替换它时,它都会使整个字符串大写,而不仅仅是与查询匹配的字符串。

我究竟做错了什么?顺便说一句,我是一个完整的正则表达式菜鸟,一个小时前才开始,但任何帮助都将不胜感激......

4

2 回答 2

2
$string = 'Article Title Of Unknown Length by Author Name: some.url';
$string =~ s/^(.*)(?= by )/\U\1\E/gi;
print $string; # ARTICLE TITLE OF UNKNOWN LENGTH by Author Name: some.url

编辑>

/           search for
^           at start of string 
(.*)        match and capture a group of 0+(`*`) any character (`.`)
(?= by )    followed by literal " by " (`?=` is positive lookahead)
/           replace with
\U          start upper-casing
\1          the first captured group
\E          stop upper-casing
/           options
g           search globally
i           case insensitive
于 2012-05-29T01:37:01.653 回答
0

请注意,guido 如何在“by”周围包含空格,以便此正则表达式与“Messing With Abby by Abby: some.url”等内容一起使用。如果您的输入中有标签等,您可能希望将它们替换为“\s”。不确定雅虎管道是如何工作的。很可能replace [^(.*)(?= by )] with [\U$1]会成功。无论如何,模式^(.*)( by )(.*)$将匹配整个输入,分为三个部分,所以从这里应该很容易弄清楚如何重建你需要的东西replace [^(.*)( by )(.*)$] with [\U$1 by \$3]或类似的东西。

于 2012-05-29T08:00:42.720 回答