我正在尝试使用正则表达式从日志中查找文件路径。但它也与时间戳匹配。
我使用的是这种模式:/(?:\w)[a-zA-Z0-9_./$-](([a-zA-Z0-9_./$-]+ ?)+)*/?
假设字符串为:Date logged on 23/34/12 12:34:12 AM into /asd/asd/sfd
但它也匹配34/12 12
。如何防止这种情况发生。我可以从代码中做到这一点。我想从正则表达式本身做到这一点。
答案 0 :(得分:1)
首先,你不应该像这样嵌套量词 - 你自己容易受到catastrophic backtracking的攻击。</ p>
其次,您必须考虑将文件路径与日期戳完全区分的内容。我能想到的最简单的事情是文件路径需要以/
开头,之前没有数字(或其他字母数字)。可以使用word boundary anchor \B
:
\B/[\w./$-]+(?: [\w./$-]+)*
答案 1 :(得分:0)
我不确定,但你可以尝试一下。这将限制它使第一个成为字符而不是数字。
/(?:\w)[a-zA-Z]{1}[a-zA-Z0-9_./$-](([a-zA-Z0-9_./$-]+ ?)+)*/?
答案 2 :(得分:0)
如果你的引擎支持看起来很好:
'(?<=into )[\w./$-]+'