<?xml version="1.0" encoding="gbk"?>
<rss version="2.0">
  <channel>
    <title>曲径通幽论坛 - 正则表达式</title>
    <link>http://www.groad.net/bbs/forum.php?mod=forumdisplay&amp;fid=120</link>
    <description>Latest 20 threads of 正则表达式</description>
    <copyright>Copyright(C) 曲径通幽论坛</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Sun, 03 May 2026 02:38:42 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>http://www.groad.net/bbs/static/image/common/logo_88_31.gif</url>
      <title>曲径通幽论坛</title>
      <link>http://www.groad.net/bbs/</link>
    </image>
    <item>
      <title>竖线(|)，择一匹配</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8984</link>
      <description><![CDATA[竖线(|) 是 “或” 的意思，表示左边匹配或者右边匹配都可以，如果左边匹配失败了，就用右边的试试。比如 /www|groad|net/ 能匹配任何含有 www 或 gorad 或 net 的字符串。
举例：

上面表达式匹配了 groad and net 或 gorad or net 这两个字符串。]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Sat, 08 Aug 2015 08:34:35 +0000</pubDate>
    </item>
    <item>
      <title>备份文件变量($^I)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4917</link>
      <description><![CDATA[$^I 操作符可以在修改原文件的时先进行备份，其备份方式按照 $^I 给出的字符串作为备份文件的后缀名。

先假设下面有 temp1.txt 到 temp6.txt 六个文本文件，其中每个文件中都有一句话，且每句话中含有一个单词 Jasmine 。下面程序将一次性更新 6 个文件中的单词 Jasmin ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Wed, 05 Oct 2011 10:13:25 +0000</pubDate>
    </item>
    <item>
      <title>跨行模式匹配(/m)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4914</link>
      <description><![CDATA[传统的正则表达式都是用来匹配单行文本，但 Perl 具有处理任意长度字符串的能力，所以它也能处理多行文本；处理多行文本和处理单行文本并没有什么差异。下面的表达式表示 3 行文本：

^ 和 $ 通常用来匹配整个字符串的开始与结束，但是当模式加上 /m 修饰符(m 可以理解 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Wed, 05 Oct 2011 05:05:46 +0000</pubDate>
    </item>
    <item>
      <title>贪婪与非贪婪</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4913</link>
      <description><![CDATA[正则表达式的量词，如 + 和 * 是具有贪婪性的，也就是说，在保证整体匹配的前提下，它们会尽量匹配长字符串，实在不行才会吐出一点，而吐这个动作可称为“回溯” 。下面分析贪婪与回溯的过程：
 
假如有一个字符串为：Have you read the article on information revolut ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Tue, 04 Oct 2011 14:00:38 +0000</pubDate>
    </item>
    <item>
      <title>join 函数</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4901</link>
      <description><![CDATA[join 函数是 split 的反向使用。split 将字符串分解，而 join 则用来将各个子字符串片段联合成一个长的字符串，用法如下：


比如：
[mw_shl_code=perl,true]#!/usr/bin/perl

my $result = join \&quot;:\&quot;, \&quot;beyes\&quot;, \&quot;x\&quot;, \&quot;1000\&quot;, \&quot;100\&quot;, \&quot;beyes\&quot;, \&quot;/home/beyes\&quot;, \&quot;/bin/bash ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 03 Oct 2011 15:02:33 +0000</pubDate>
    </item>
    <item>
      <title>split 操作符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4900</link>
      <description><![CDATA[split  操作符可以根据指定的分隔符来拆分一个字符串，它的功能类似于 awk 中的 -F 选项。它的使用方法如下：

split 操作符扫描指定的字符串 $string, 然后根据分隔符对字符串进行分割，最后返回字段(子串)列表。以 /etc/passwd 里的每一行的用户信息为例：
[mw_shl_co ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 03 Oct 2011 13:43:33 +0000</pubDate>
    </item>
    <item>
      <title>大小写转换（\\U, \\L, \\E, \\u, \\l)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4898</link>
      <description><![CDATA[%u 字符回将其后的所有字符都转换成大写形式，如：

运行输出：


\\L 转义字符会将其后的字符都转换为小写，如：
[mw_shl_code=perl,true]$ ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 03 Oct 2011 09:18:22 +0000</pubDate>
    </item>
    <item>
      <title>\\x 加入空白</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4897</link>
      <description><![CDATA[/x 修饰符能够在模式里随意加上空白，其目的是使它更容易阅读和理解。

考虑下面代码：
[mw_shl_code=perl,true]#!/usr/bin/perl

$_ = \&quot;-&amp;1234#9032\&quot;;

if (/^-?&amp;\\d+\\.?\\d*/) {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;print \&quot;matched\\n\&quot;;
}else {
&#160;&amp;#1 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 03 Oct 2011 06:48:15 +0000</pubDate>
    </item>
    <item>
      <title>s/// 替换模式</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4895</link>
      <description><![CDATA[和 vi/vim 里所用的替换一样，Perl 一样使用 s/// 模式来进行替换。最简单的用法如下：
[code=perl]#!/usr/bin/perl

$_ = \&quot;welcome to groad.net\&quot;;

s/groad/GROAD/;

print \&quot;$_\\n\&quot;;[/mw_shl_code]
运行输出：

 
模式匹配里可以使用正则表达式：
[code=perl]#!/usr/bi ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 03 Oct 2011 03:21:20 +0000</pubDate>
    </item>
    <item>
      <title>正则表达式优先级</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4881</link>
      <description><![CDATA[优先级按照表格从上往下降低：

正则表达式特性                                      例子
圆括号 (分组或者捕获)             (...),    (?:...),   (?...)

量词                                              a*,   a+,   a?,   a{n,m}

锚位和序列               ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Thu, 29 Sep 2011 10:15:11 +0000</pubDate>
    </item>
    <item>
      <title>通用量词( { } )</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4880</link>
      <description><![CDATA[*, +, ?, 这 3 个符号都属于量词。其中 * 表示匹配 0 次或多次；+ 表示匹配 1 次以上；? 表示匹配 0 次或 1 次。

这里还有一个量词符号 { } 。在 { } 里面可以指定匹配的范围及次数。下面举例说明：

{3, 8}  ：这种形式表示匹配 3 次到 8 次。

{3,} ：这种形式(3 后 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Thu, 29 Sep 2011 09:31:13 +0000</pubDate>
    </item>
    <item>
      <title>自动匹配变量($&#39;&#160;&#160;$&amp;&#160;&#160; $`)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4878</link>
      <description><![CDATA[$\'&#160;&#160;$&amp;&#160;&#160; $` 这 3 个符号对应 3 个自动变量，所谓自动变量就是根据匹配情况而自动设置的变量。

$&amp;&#160;&#160;变量存储所有匹配的部分。

$\'&#160;&#160;&#160;&#160;变量存储了匹配字符串身后没有匹配的部分。

$`&#160;&#160; 变量存储了匹配字 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Thu, 29 Sep 2011 09:14:10 +0000</pubDate>
    </item>
    <item>
      <title>将捕获的匹配放在变量中(特殊哈希 %+)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4877</link>
      <description><![CDATA[像 $1, $2 这样的 有点难以管理，比如下面的例子可以说明这一点：
[code=perl]#!/usr/bin/perl

use 5.010;

my $names = \&quot;Tom or Cat\&quot;;

if ( $names =~ m/(\\w+) (and|or) (\\w+)/) {
        say \&quot;I saw $1 and $2\&quot;;
}[/mw_shl_code]
 
运行输出：

这里 (and | or) 可 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Thu, 29 Sep 2011 06:33:19 +0000</pubDate>
    </item>
    <item>
      <title>关闭捕获功能( ?: 符号）</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4862</link>
      <description><![CDATA[在 里我们会将捕获到的匹配字符串赋值到捕获变量里，但有些时候却需要关闭该功能，我们需要的只是用它来进行分组。

先比较下面关闭捕获功能之前的代码：
[mw_shl_code=perl,true]#!/usr/bin/perl

$_ = \&quot;groad.net\&quot;;

if (/(www)?(groad.net)/) {
        print \&quot;you w ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Tue, 27 Sep 2011 12:13:10 +0000</pubDate>
    </item>
    <item>
      <title>问号(?)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4861</link>
      <description><![CDATA[问号(?) 表示前一个条目可有可无，也就是说，它的前一个条目可以出现一次或不出现。

测试代码：
[mw_shl_code=perl,true]#!/usr/bin/perl

$_ = \&quot;groad.net\&quot;;

if (/(www)?(groad.net)/) {
        print \&quot;you want to vist $2\\n\&quot;;
}

$_ = \&quot;www.groad.net\&quot;;
if (/(www ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Tue, 27 Sep 2011 11:21:09 +0000</pubDate>
    </item>
    <item>
      <title>捕获变量($1, $2, $3 ...)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4859</link>
      <description><![CDATA[模式里使用圆括号可以表示  还拥有捕获功能。捕获功能是指，把圆括号中模式所匹配的字符串存储在捕获变量里。这些捕获变量的名字如 $1, $2, $3 ...有多少对圆括号模式的匹配，就有多少个这样的变量。

$1 , $2 这样的捕获变量和模式匹配过程中的反响引用 \\1, \\2 的区别 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Tue, 27 Sep 2011 09:13:12 +0000</pubDate>
    </item>
    <item>
      <title>模式分组</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4857</link>
      <description><![CDATA[使用圆括号进行模式分组，圆括号也是元字符。
我们可以使用 \\1, \\2 这样的写法来反向引用，其中反斜线后面的数字是和括号的组号匹配的。下面例子说明这种情况：
[mw_shl_code=perl,true]#!/usr/bin/perl
$_ = \&quot;www.groad.net\&quot;;
if (/(.)\\1\\1/) {
    print \&quot;It match.\\n ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Tue, 27 Sep 2011 05:48:29 +0000</pubDate>
    </item>
    <item>
      <title>绑定操作符 =~</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4853</link>
      <description><![CDATA[默认情况下，模式匹配的对象是 $_ ，但是用绑定操作符 =~ 可以让 Perl 拿右边的模式匹配左边的字符串或字符串变量。比较下面代码：
[mw_shl_code=perl,true]#!/usr/bin/perl -w

my $var = \&quot;welcome to groad.net\&quot;;

if (/\\bto\\b/) {
        print \&quot;match\\n\&quot;;
} else { ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 26 Sep 2011 11:29:23 +0000</pubDate>
    </item>
    <item>
      <title>\\w 匹配单词 | \\b 匹配单词边界 | \\s 匹配空白 | 锚位</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4852</link>
      <description><![CDATA[像平常所见表示开头的 脱字符(^) 和 表示末尾的 美元符 ($) 都称为一个锚位。比如 /^\\s*$/ 可以匹配一个空白行，该空白行中可以包含各种制表符以及空格。这里 \\s 表示“空白” 它相当于 [\\f\\t\\n\\r ] ；其中 \\f 表示换页，\\t 表示制表，\\n 表示换行，\\r 表示回车 以及后 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 26 Sep 2011 09:52:43 +0000</pubDate>
    </item>
    <item>
      <title>/s 使 &#39;.&#39; 号能匹配换行符 (匹配任何字符 [\\d\\D])</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4846</link>
      <description><![CDATA[默认情况下，点号 (\'.\') 无法匹配换行符。也许在很多情况下我们也无需去匹配换行符，但有些时候却也希望能够匹配一下换行符，解决办法是使用 /s 来增强 \'.\' 号的功能，使之可以匹配换行符。这样一来， . 就能 匹配任何字符了。

说到匹配任何字符，那么还提到另外一个符 ...]]></description>
      <category>正则表达式</category>
      <author>beyes</author>
      <pubDate>Mon, 26 Sep 2011 06:48:43 +0000</pubDate>
    </item>
  </channel>
</rss>