Sas*_*Sas 4 perl shell-script regular-expression
我有一个使用 grep 的工作 perl 正则表达式。我试图了解它是如何工作的。
这是命令命令。
grep -oP '(?<=location>)[^<]+' testFile1.xml
Run Code Online (Sandbox Code Playgroud)
以下是内容 testFile1.xml
<con:location>C:/test/file1.txt</con:location></con:dataFile>/con:dataFiles></con:groupFile>
Run Code Online (Sandbox Code Playgroud)
这就是结果
C:/test/file1.txt
Run Code Online (Sandbox Code Playgroud)
我试图理解正则表达式,即这部分 (?<=location>)[^<]+
(?<=...)是一个后视PCRE 算子。就其本身而言,它不匹配任何内容,而是充当条件(左侧的内容匹配...)。
(?<=X)Y匹配Y条件是左边的匹配X。在 中blahYfooXYbar,匹配第二个Y,X不是正在匹配的内容的一部分。在(?<=X)本身的零宽度(匹配虚)点之前只是Y。这里说明:
$ echo X-RAY THE FOX | perl -lpe 's/(?<=X)/<there>/g'
X<there>-RAY THE FOX<there>
Run Code Online (Sandbox Code Playgroud)
因为 with -o,grep只打印匹配的部分,这是一种让它打印后面的内容location>(这里匹配的是[^>]+:一个或多个 ( +) 非<字符 ( [^>]) 所以一切直到(但不包括)下一个<字符或结尾该行提供它不为空)。
另一种方法是使用\K(在较新版本的 PCRE 中)重置匹配部分的开始:
grep -Po 'location>\K[^>]+'
Run Code Online (Sandbox Code Playgroud)
请注意,-P和-o是 GNU 扩展。使用pcregrep(另一个grep使用 PCRE 的实现)的最新版本(8.11 或更高版本),您还可以执行以下操作:
pcregrep -o1 'location>([^>]+)'
Run Code Online (Sandbox Code Playgroud)
(-o1打印第一个(此处是唯一的)捕获的内容(...))
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |