如何使“+”和“*”在正则表达式的超前工作
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)
这样的正则表达式并提取第一个捕获组的值。尽管在这个例子中,正则表达式似乎有些过分了...
我现在在使用正则表达式公式内的超前正则表达式时遇到问题。特别地,给定字符串:
"hello" world
那么下面的正则表达式似乎不起作用:
(?<=\"\w+\" )world
那么正则表达式怎么可能是我可以用来捕捉 'world' 的呢?
当我在正则表达式游乐场检查您的正则表达式时,它在“?<=”中显示了一些错误。然后,我将您的正则表达式更改为
(\?*<*=*"*\w+"* )world
它与测试用例 "hello" 世界匹配。
第一个问题你需要在'?'之前使用'\'
关于*和+的其他:*需要匹配0个或多个,+需要匹配1个或多个。所以,可以跳过的单词后面加*,不能跳过的单词后面加+。
测试你的正则表达式并理解公式的意思是:https://regexr.com/
您的示例 ((?<=\"\w+\" )world
) 中的正则表达式是后视而不是前视。大多数语言,包括 PHP,不支持 lookbehind 中的非固定长度正则表达式。
相反,您可以编写像 \"w+\" (world)
这样的正则表达式并提取第一个捕获组的值。尽管在这个例子中,正则表达式似乎有些过分了...