Regex 从行首到左方括号,选择“全部”

Regex 从行首到左方括号,选择“全部”,regex,regexbuddy,Regex,Regexbuddy,我需要一个正则表达式,它将选择从行开始到第一个左方括号的所有内容。在下面的示例中,它将匹配Lorem、Concertetur Adipising和labore et Lorem [ipsum] dolor sit amet, consectetur-adipisicing [elit] sed do eiusmod tempor incididunt ut labore et [dolore] magna aliqua. 谢谢您的帮助。我想说最简单的版本是: (.*)\[.我认为最简单

我需要一个正则表达式,它将选择从行开始到第一个左方括号的所有内容。在下面的示例中,它将匹配LoremConcertetur Adipisinglabore et

Lorem [ipsum] dolor sit amet,

consectetur-adipisicing [elit] sed do 

eiusmod tempor incididunt ut

labore et [dolore] magna aliqua.

谢谢您的帮助。

我想说最简单的版本是:


(.*)\[.

我认为最简单的版本是:


(.*)\[.*

尝试
“[^\[]*”
[]
表示字符集,
^\[/code>表示除
[
*
之外的任何内容重复任意次数。因此,结合起来,这应该是你的答案尝试
“[^\[]*”
[]
表示字符集,
^\[
表示除
[
*
重复任意次数之外的任何内容。因此,结合使用“向后看”和“向前看”应该是您的答案:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing

(?使用向后看和向前看:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing

(?这可能会有帮助

^(.*)\[
简单示例:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing
输出为:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing

这可能会有帮助

^(.*)\[
简单示例:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing
输出为:

(?<=^|\n)(.*?)(?=\s?\[)
my $str ="consectetur-adipisicing [elit] sed do";
my $tmp;
if ($str =~ m/^(.*)\[/) {
    $tmp = $1;
}
print "String upto [: $tmp\n";
String upto [: consectetur-adipisicing

当一个简单的锚和否定的字符类可以实现这个技巧时,为什么人们要使用点和复杂的环视结构呢

(?m)^[^\[\r\n]+(?=\[)
如果您的正则表达式风格支持它,您可以通过使量词具有所有格来进一步优化此正则表达式:

(?m)^[^\[\r\n]++(?=\[)
如果您的正则表达式风格不支持前瞻,请在匹配中包含
[
,并使用捕获组获取您想要的部分:

(?m)^([^\[\r\n]+)\[

如果您的正则表达式风格不支持模式修饰符,如
(?m)
,只需打开选项,使
^
在正则表达式外部的换行符(“多行模式”)匹配即可。

当简单的锚定和否定字符类可以实现此目的时,为什么人们要使用点和复杂的环视结构

(?m)^[^\[\r\n]+(?=\[)
如果您的正则表达式风格支持它,您可以通过使量词具有所有格来进一步优化此正则表达式:

(?m)^[^\[\r\n]++(?=\[)
如果您的正则表达式风格不支持前瞻,请在匹配中包含
[
,并使用捕获组获取您想要的部分:

(?m)^([^\[\r\n]+)\[


如果您的正则表达式风格不支持模式修饰符,如
(?m)
,只需打开选项,使
^
在正则表达式外部的换行符(“多行模式”)匹配。

谢谢Salgar,但它匹配整行,而不仅仅是括号前面的单词。当我删除。*并应用(.*)时[它符合我的要求,只是它包括了比赛中的括号,而且它不应该是太抱歉了,我以为你想要一场最初部分的团体比赛。按照阿巴苏在这种情况下所说的去做。杜克林的表情就像一个符咒,问题解决了,谢谢你萨尔加。谢谢萨尔加,但它匹配了整句话,而不仅仅是前面的词括号。当我删除。*并应用(.*)时[它符合我的要求,只是它包括了比赛中的括号,而且它不应该是这样的。对不起,我以为你想要一场初始部分的团体比赛。按照阿巴苏在这种情况下所说的去做。杜克林的表情很有魅力,问题解决了,谢谢你萨尔加。回答得很好@Dukeling,非常详细。我想在前面加上\s[跳过空白。顺便说一句,这与eiusmod tempor INDIDUNT ut匹配,这是一行中没有[char]的文本。感谢您的解释Dukeling!@RolandoIsidoro添加了
\s
。您确定它与没有
[
的行匹配吗?这应该通过前瞻(
(?=\s?\[)
。@RolandoIsidoro取消勾选“DOT ALL”,然后它会根据需要工作。另一个选项是更改
以排除新行(可能类似于
[^\n]
)。很好的答案@Dukeling,非常详细。我会在前面添加\s[跳过空白。顺便说一句,这与eiusmod tempor INDIDUNT ut匹配,这是一行中没有[char]的文本。感谢您的解释Dukeling!@RolandoIsidoro添加了
\s
。您确定它与没有
[
的行匹配吗?这应该通过前瞻(
(?=\s?\[)
。@RolandoIsidoro Untick“DOT ALL”,然后根据需要工作。另一个选项是更改
以排除新行(可能类似于
[^\n]
)。感谢您的帮助!它可以做到这一点,但缺陷是它捕获了匹配中的括号。@Totokupalvera,它将匹配
[
但您将在
$1中获得所需的值。我在回答中添加了一个示例。感谢您的帮助!它确实可以,但缺陷在于它捕获了匹配中的括号。@TotoKalvera,它将匹配到
[
但是您将在
$1
中获得所需的值。我在回答中添加了一个示例。您是正确的,在开始时不需要查找断言,但在结束时需要查找断言,以确保有一个
[
遵循该模式(您的正则表达式错误地匹配了“eiusmod temporal incidundut”)。此外,表达式中需要开头方括号,而不是结尾方括号。我认为您的意思是
(?m)^[^\[\r\n]+(?=\[)
。如果没有任何
[
的行不能匹配,则
[
不能包含在匹配中,那么您需要一个前瞻。正确的说法是,在开始时不需要前瞻断言,但在结束时需要一个前瞻断言,以确保有一个
[
遵循该模式(您的正则表达式错误地匹配了“eiusmod temporal incidiut ut”)。此外,表达式中需要开头方括号,而不是结尾方括号。我认为您的意思是
(?m)^[^\[\r\n]+(?=\[)
。如果没有任何
[
的行不能匹配,并且
[
不能包含在匹配中,则需要进行前瞻。