wzh880801 发表于 2010-11-7 22:25:19

[已解决]正则搜索字符串问题,'^'元字符使用问题。

本帖最后由 wzh880801 于 2010-11-7 22:38 编辑


#include <array.au3>
$text = FileRead('1.ini')
$str = StringRegExp($text,'^\[.+]',3)
_ArrayDisplay($str)
1.ini内容如下

a=1

b=2

c=3
根据教程和书(正则表达式经典实例 Jan Goyuaerts)上说的,^ 表示的是匹配开头的.比如 ^the 匹配 theabc中的the,而不匹配abcthe中的the,就这个例子来说,返回的结果应该是





但是结果却是:


仅仅匹配了第一行的。

如果改为
#include <array.au3>
$text = FileRead('1.ini')
$str = StringRegExp($text,'\[.+]',3)
_ArrayDisplay($str)
结果是






这个结果不是想要的。我要的结果是ini的段头.

大侠们指点下~~~^ 到底是怎么个用法。。。

afan 发表于 2010-11-7 22:33:36

^是默认是匹配“整个字符串”的开头,并非每行的开头,如果要匹配每行的开头,需加个(?m)(?m)^\[.+]

wzh880801 发表于 2010-11-7 22:39:10

回复 2# afan
看来我现在看的书也被翻译错了,它上面说的是匹配每行,还给出了例子……

lchl0588 发表于 2010-11-8 07:23:16

这是我以前测试的方法,你看下^匹配字符串的开始的一个位置,同时也表示否的表达式,表示不想被匹配的字符,一般和[]一起使用。也匹配输入字符串的开始

MsgBox(0, "测试结果", StringRegExp("abcd1234", '^a'))
结果是1
MsgBox(0, "测试结果", StringRegExp("abcd1234", '^b'))
结果是0
为何是0呢,我们要看"abcd1234"开头是a而不是b,如果把"abcd1234"改"bcd1234",那结果就是1

binghc 发表于 2010-11-8 12:48:07

回复 2# afan


    (?m)为什么对$不起作用啊:

a=1

b=2

c=3
找其中的:
(?m)^.*?8]$

afan 发表于 2010-11-8 12:52:17

本帖最后由 afan 于 2010-11-8 12:53 编辑

回复afan


    (?m)为什么对$不起作用啊:

a=1

b=2

c=3
找其中的 ...
binghc 发表于 2010-11-8 12:48 http://www.autoitx.com/images/common/back.gif

因为$前面可能会有\r
(?m)^.*?8]\r?$

binghc 发表于 2010-11-8 13:13:08

回复 6# afan


    原来这样,学习了

lchl0588 发表于 2010-11-8 13:20:55

本帖最后由 lchl0588 于 2010-11-8 13:56 编辑

回复 5# binghc #include <array.au3>
$text = FileRead('1.ini')
$str = StringRegExp($text,'(?m)^\',3)
_ArrayDisplay($str)还有(?m)^\[.*8]
感觉^是这样用
页: [1]
查看完整版本: [已解决]正则搜索字符串问题,'^'元字符使用问题。