2017-11-11 74 views
1

本來,我用是爲完全相符的文字只是字的邊界 - https://regex101.com/r/M97FkV/4確切的詞衝突字與前圍

更新1

1)完全相符的文字裏面的字標點符號,如20-year-old

  • 搜索year's只有year's確切匹配

- 單獨的搜索year,將不匹配year's

  • 如果我搜索20-year-old,準確20-year-old是匹配

- 搜索20yearold不會匹配20-year-old

2 )在標點符號之前或之後的精確匹配詞

  • 如果我搜索old,確切的詞或前或標點後old.oldold.-oldold-_oldold_old''old這些都會匹配。

- old將不會與標點符號中的單詞匹配20-year-old

我們最後的進展

https://regex101.com/r/M97FkV/15 - 解決(2),而不是(1)

https://regex101.com/r/M97FkV/16 - 解決(1),而不是(2)

+0

我們是否需要考慮多個前導或尾隨標點符號的可能性? '字,''? – mickmackusa

+0

我很難告訴我的手機,但我想這是一個Unicode單引號或捲曲單引號。複製該字符並粘貼到谷歌搜索中以確定。當我到達我的電腦時,我會將unicode標誌添加到我的答案中。 – mickmackusa

回答

0

包括不區分大小寫和Unicode彎單引號...

模式:/(?:^|\s)[-_,'’.]*\Kold(?=[-_,'’.]*(?:\s|$))/ui

替換:young

演示:https://regex101.com/r/M97FkV/20

此輸入:old 20-year-old _old-maid _old- -old old-’’’ 'old' 20-year-old old’ ....old

將變爲:young 20-year-old _old-maid _young- -young young-’’’ 'young' 20-year-old young’ ....young

(?:^|\s)字符串或空格字符開始匹配。

[-_,'’.]*在字符類的零個或更多的字符(列表)

\K重啓fullstring匹配相匹配。這樣做是爲了避免使用捕獲組,更重要的是使用php不允許的「可變寬度後視」。

old是正在搜索的文字字符串。你可以在這個位置應用你的變量。

(?=[-_,'’.]*(?:\s|$))是一個由兩部分組成的預測表達式。它匹配字符類(列表)中的零個或多個字符,然後需要一個空格字符或字符串的結尾。

所有這種卷積都是爲匹配具有可選前導和/或尾隨標點符號的目標子字符串而完成的,但不包括非非空白字符。

+0

@kiki更新。如果這完全解決,您可以授予綠色的勾號。如果您想進一步解釋/澄清,或者如果有任何不正確的地方,請留下我的評論。 (我們也應該刪除我們已經過時的評論來整理頁面) – mickmackusa

+0

我的答案的核心仍然是一樣的。根據您的需求擴展字符類。 https://regex101.com/r/M97FkV/23我會留給你,以確保標點清單對你的項目是準確的。 – mickmackusa

+0

謝謝@mickmackusa!將繼續探索,回到學習新事物! – kiki