我正在处理一系列文字,其中我正在寻找以下字符串:
正在分析的文本是,例如,
17 INT. BLOOM HOUSE - NIGHT 17
27 INT./EXT. BLOOM HOUSE - (PRESENT) DAY 27
例如,在php中调用
preg_match("/^\w.*(INT\.\/EXT\.|EXT\.\/INT\.|EXT\.|INT\.)(.*)$/", $a_line, $matches);
并且那些不完全正确处理贪婪的变体(或者我认为,无论如何),并且遗漏了一些东西,通常是INT./EXT.
或EXT./INT.
项。有什么建议?谢谢!
答案 0 :(得分:1)
是的,您需要使用与\w.*?
的懒点匹配,但您也可以优化模式以缩短交替组,如下所示:
/^\w.*?(INT\.(?:\/EXT\.)?|EXT\.(?:\/INT\.)?)(.*)$/
请参阅regex demo
另外,如果您要整体处理文本,则需要/m
多行修改。
<强>详情:
^
- 字符串的开头\w
- 一个字char .*?
- 除了换行符之外的任何0 +字符尽可能少到第一个字符(INT\.(?:\/EXT\.)?|EXT\.(?:\/INT\.)?)
- 第1组捕获:
INT\.(?:\/EXT\.)?
- INT.
后跟可选的/EXT.
substring |
- 或EXT\.(?:\/INT\.)?
- EXT.
后跟可选的/INT.
substring (.*)
- 第2组:除了换行符之外的任何0 +字符... $
- 字符串结束。