示例: 书=包含字符串整个文本如何捕获组并排除捕获中的单词?
STARTCHAR =那里应该开始捕获= |
EndChar =会在那里应该结束捕获= §
字在捕获忽略=灰
所以,如果它不是“灰色”这个词,我的捕获将是一个简单的:|(.+)§
下面是我的意思的一个例子:
书=“灰色的狐狸是灰色的,它的相当灰色”。
捕获=“使得它的漂亮”
使用C#和PHP,但我不希望使用任何替换功能,我只想要一个纯粹的正则表达式表达。
示例: 书=包含字符串整个文本如何捕获组并排除捕获中的单词?
STARTCHAR =那里应该开始捕获= |
EndChar =会在那里应该结束捕获= §
字在捕获忽略=灰
所以,如果它不是“灰色”这个词,我的捕获将是一个简单的:|(.+)§
下面是我的意思的一个例子:
书=“灰色的狐狸是灰色的,它的相当灰色”。
捕获=“使得它的漂亮”
使用C#和PHP,但我不希望使用任何替换功能,我只想要一个纯粹的正则表达式表达。
您可以在全局搜索中使用此模式:
(?:\G(?!\A)|\|)(?:\bgray\b)?\K((?:(?!\bgray\b)[^§])+)(?=(?:gray)?(§)?)
细节
(?: # the two entry points
\G(?!\A) # position at the end of the pevious match
|
\| # the start
)
(?:\bgray\b)? # optional "gray"
\K
((?:(?!\bgray\b)[^§])+) # all that is not the word "gray" (see the note)
(?=(?:gray)?(§)?) # trick to capture the last §
注:此子模式是一个众所周知的把戏匹配文本avoidin g一个字。但是,这种子模式特别是对于长文本而言很慢,并且要避免几句话。
它可以被替换为:((?>[^g§]+|\Bg|g(?!ray\b))+)
可能更快(但不太容易以编程方式构建)。
使用示例使用PHP:
$book = "The gray fox is |so gray that its pretty gray§.";
$reg = '~(?:\G(?!\A)|\|)(?:\bgray\b)?\K((?:(?!\bgray\b)[^§])+)(?=(?:gray)?(§)?)~';
if (preg_match_all($reg, $book, $matches) && !empty(end($matches[2])))
echo implode('', $matches[1]);
注:最后一个捕获组是只有在这里,以确保年底已经达到。 “if”条件检查它是否与!empty(end($matches[2]))
谢谢你完整回答我的问题。 – Zananok
使用正则表达式查找句子,在'/ gr [ae] y /'上分割并加入结果片段。 –
你使用什么工具或语言? –
你想要在哪种语言中实现这一点?根据不同的情况,你也可以使用替换函数,它在大多数语言中接受正则表达式和占位符/替换序列。 – cnsumner