我正在阅读一个文件,并在整个文件中搜索某个模式。以下是示例行:
DATA "1354236384craan18p.1354236392craan18p.1354668684AR_ESCALATORCase HD0347023 was automatically closed on 5/12/2012 1:51:24 p.m.." "IT Services | File Services | Recovery"
我想要的是创建一个给我"IT Services | File Services | Recovery"
的正则表达式
只有部分。
我有以下正则表达式和代码,但不起作用 - 任何想法?
$whole_wk_file = file_get_contents('Work.arx');
$pattern1 = '/\"[^\"\|]+\|[^\"\|]+\|[^\"\|]+\"/';
preg_match_all($pattern1, $whole_wk_file, $matches_wk, PREG_PATTERN_ORDER);
print_r($matches_wk{0});
再次,这是在PHP。
答案 0 :(得分:0)
试试这个正则表达式
'/"(([^"|]+\|){1,}[^"]+)"/'
文本将在每场比赛的第1组中,或者甚至只是这一个
'/(?<=")(?:[^"|]+\|){1,}[^"]+(?=")/'
将在没有任何组的情况下匹配
答案 1 :(得分:0)
$whole_wk_file = file_get_contents('Work.arx');
$pattern1 = '/\"[^\"\|]+\|[^\"\|]+\|[^\"\|]+\"/';
mb_internal_encoding("Windows-1252");
mb_eregi($pattern1, $whole_wk_file, $matches_wk);
print_r($matches_wk);
答案 2 :(得分:0)
您的正则表达式似乎找到了您想要的所有匹配项,但我在引用的部分中也恰好包含恰好包含两个管道(|
)的误报。你在评论中说每个匹配应该在它的封闭线的末尾,所以添加一个锚应该解决这个问题:
'/"[^"|]+\|[^"|]+\|[^"|]+"[ ]*$/m'
m
修饰符授权$
锚点在行边界处匹配,[ ]*
就在那里,因为文件的每一行似乎都以空格字符结尾。我可以使用\s*
代替,但这会匹配换行符和空格。然后它必须立即给它们,所以锚($
)可以完成它的工作。本着这种精神,完全排除新行可能值得你花时间:
'/"[^"|\r\n]+\|[^"|\r\n]+\|[^"|\r\n]+"[ ]*$/m'
我也摆脱了一堆不必要的反斜杠。
对于那些垃圾字符,我认为Kelly Copley是正确的,它不是编码问题(或者如果是,则修复它为时已晚)。它们似乎不会影响你关心的部分。