【发布时间】:2022-01-27 17:33:16
【问题描述】:
我正在尝试使用一种模式来查找某个单词,然后匹配该单词后面的一些字符,然后是一个可选的短语。可选短语在其自己的捕获组中,不应被一些字符捕获。我的例子如下:
(test((.(?!hi)){0,5}))(hi)
我已经在各种配置中尝试过这个和其他配置,并且给定输入字符串“test hi”,这将自己匹配“test”,但我无法让它匹配可选捕获组中的“hi”。
编辑:第二个例子
(test((?!tst).{0,5}))(tst)?(hi)
在“test tst hi”上运行它会正确得到 3 个组,但是,第 1 组将包含“test tst”,它应该只包含“test”。在这种情况下,第 2 组和第 3 组是正确的。
【问题讨论】:
-
您能否提供更多示例(预期的输入和输出)?
-
@rikyeah 我已经添加了第二个,虽然它并没有太大的不同。
-
我还是不明白你的问题……你能改写一下整个吗?
-
“匹配一定数量的字符” - 在多少之间?您的正则表达式似乎暗示介于 0 和 5 之间(但 0 不是“某个数字”)。如果您包含初始字符串的示例以及您期望从中提取的内容会更好。您在第一段中对问题的描述似乎与以下示例不匹配?并且正则表达式可能只会让事情变得混乱......你为什么要捕获最初的单词?为什么是负前瞻?
-
我有一个正则表达式模式,它正在寻找特定的前缀,一旦我找到该前缀,我想找到它后面的任何 {1,10} 左右的字符。除了,如果我找到某种可选模式(嗨)?在第一种情况下,我希望它停止上升到 {1,10} 并在可选组中保留“hi”,而不是被 {1,10} 组捕获。
标签: regex