我需要一个正则表达式,它将选择从行首到第一个左方括号的所有内容。在下面的示例中,它将匹配Lorem、 consectetur - adipisicing和labore et
Lorem [ipsum] dolor sit amet,
consectetur-adipisicing [elit] sed do
eiusmod tempor incididunt ut
labore et [dolore] magna aliqua.
感谢您的帮助。
我需要一个正则表达式,它将选择从行首到第一个左方括号的所有内容。在下面的示例中,它将匹配Lorem、 consectetur - adipisicing和labore et
Lorem [ipsum] dolor sit amet,
consectetur-adipisicing [elit] sed do
eiusmod tempor incididunt ut
labore et [dolore] magna aliqua.
感谢您的帮助。
当一个简单的锚和否定字符类可以解决问题时,为什么人们会使用点和复杂的环视结构?
(?m)^[^\[\r\n]+(?=\[)
如果您的正则表达式支持它,您可以通过使量词所有格来进一步优化此正则表达式:
(?m)^[^\[\r\n]++(?=\[)
如果您的正则表达式风格不支持前瞻,请[在匹配中包含 并使用捕获组来获取您想要的部分:
(?m)^([^\[\r\n]+)\[
如果您的正则表达式风格不支持模式修饰符(?m),只需打开选项以^在正则表达式之外的换行符(“多行模式”)处进行匹配。
使用后视和前瞻:
(?<=^|\n)(.*?)(?=\s?\[)
解释:
(?<=...)是肯定的后视,检查前面的字符是否匹配。
^|\n旨在成为行首。文本开头 ( ^) 或换行符 ( \n)。
.是任何字符。
.*?是零个或多个任意字符。*?而不*是非贪婪匹配,因此它将匹配第一个而不是最后一个括号。
(?=...)是积极的前瞻,检查下一个字符是否匹配。
\s是空白,?使其成为可选(这是为了防止 之前的空格[也匹配)。
\[是转义的[(它需要转义,因为[有不同的含义)
try"[^\[]*" []表示字符集,表示^\[除重复任意次数之外的任何内容。如此结合,这应该是你的答案[*
我想说最简单的版本是:
(.*?)\[.*
这可能会有所帮助..
^(.*)\[
简单示例:
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
$tmp = $1;
}
print "String upto [: $tmp\n";
输出是:
String upto [: consectetur-adipisicing