Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配没有两个单词的一行_Regex - Fatal编程技术网

Regex 匹配没有两个单词的一行

Regex 匹配没有两个单词的一行,regex,Regex,我想知道如何在没有两个单词的情况下匹配一行 例如,我想匹配一行既没有章节也没有部分。所以这两条线都不匹配: ("Chapter 2 The Economic Problem 31" "#74") ("Part 2 How Markets Work 51" "#94") 这是一场比赛 ("Scatter Diagrams 21" "#64") 我的python风格正则表达式将类似于(?。我知道这是不对的,并将感谢您的帮助。尝试以下方法: ^(?!.*(Chapter|Part)).* @M

我想知道如何在没有两个单词的情况下匹配一行

例如,我想匹配一行既没有
章节
也没有
部分
。所以这两条线都不匹配:

("Chapter 2 The Economic Problem 31" "#74")

("Part 2 How Markets Work 51" "#94")
这是一场比赛

("Scatter Diagrams 21" "#64")
我的python风格正则表达式将类似于
(?。我知道这是不对的,并将感谢您的帮助。

尝试以下方法:

^(?!.*(Chapter|Part)).*

@MRAB的解决方案会起作用,但还有另一个选择:

(?m)^(?:(?!\b(?:Chapter|Part)\b).)*$
一次匹配一个字符,在先行检查它不是
章节
部分
的第一个字符后。单词边界(
\b
)确保它不会与较长单词的部分不正确匹配,如
分区


^
$
是起始和结束锚定;它们确保匹配整行。
$
\n
更好,因为它还匹配最后一行的结尾,而最后一行的结尾不一定有换行符。
(?m)
在开头修改锚的含义;如果没有锚,它们只在整个输入的开头和结尾匹配,而不是在单个行的开头和结尾匹配。

谢谢!它是有效的!我想知道如何通过向后看来实现同样的效果,也就是说,为什么我的
(?错了?在字符串的开头,它向后看是“章”还是“部分”是的;两者都不存在,因此负查找成功。无论如何,您都不想使用查找。首先,查找只能匹配具有已知固定长度的字符串——例如,
(?可以工作,但不
(?。但即使不是这样(在这方面,其他一些正则表达式更灵活)有些正则表达式实现确实支持可变长度的lookbehinds,例如,Python的另一种正则表达式实现Watch-out:you's want reject
(“Partnerships for Fun”“#118”)
?如果您面向美国,那么
(“从第11章破产中恢复”,“#291”)
?@Jonathan:谢谢!我不想拒绝第一个例子。美国定向是什么意思?“美国定向”指的是一个事实,如果你来自欧洲或亚洲,它可能对你没有多大意义。或者,它意味着我很难想出一个你可能想保留的标题d“Chapter”一词。可能是
(“Chapter House”中的谋杀“#319”)
,但这取决于(英国国教大教堂,或者可能是修道院)的一些奇怪之处。谢谢。
(?m).
应该匹配多行吗?为什么正则表达式匹配单行?尽量不要对“multiline”这个名称读得太多“从它被发明的那一刻起,人们就对它感到困惑。
(?m)
的意思正是我所说的:你希望
^
$
锚定在行边界上匹配,而不是像通常那样在输入的开始和结束处匹配。有关更多信息,请参阅,整个教程都很好。