如何使“+”和“*”在正则表达式的超前工作

How to make "+" and "*" work inside lookahead of regex

我现在在使用正则表达式公式内的超前正则表达式时遇到问题。特别地,给定字符串:

"hello" world

那么下面的正则表达式似乎不起作用:

(?<=\"\w+\" )world

那么正则表达式怎么可能是我可以用来捕捉 'world' 的呢?

当我在正则表达式游乐场检查您的正则表达式时,它在“?<=”中显示了一些错误。然后,我将您的正则表达式更改为

(\?*<*=*"*\w+"* )world

它与测试用例 "hello" 世界匹配。

第一个问题你需要在'?'之前使用'\'

关于*和+的其他:*需要匹配0个或多个,+需要匹配1个或多个。所以,可以跳过的单词后面加*,不能跳过的单词后面加+。

测试你的正则表达式并理解公式的意思是:https://regexr.com/

您的示例 ((?<=\"\w+\" )world) 中的正则表达式是后视而不是前视。大多数语言,包括 PHP,不支持 lookbehind 中的非固定长度正则表达式。

相反,您可以编写像 \"w+\" (world) 这样的正则表达式并提取第一个捕获组的值。尽管在这个例子中,正则表达式似乎有些过分了...