示例: 書=包含字符串整個文本如何捕獲組並排除捕獲中的單詞?
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