2017-09-28 85 views
1

我無法弄清楚如何用正則表達式來做到這一點。我想在句子中的一定數量的字符後匹配句號。PHP正則表達式在一定數量的字符後匹配句號

this is a long sentence. it contains a few full stops in it. I want to match the full stop after the halfway point. 

this sentence is shorter. it also contains full stops but not many. 

它不應該匹配最後一個句號。它應該匹配第一句中的第二句句號,並且在第二句中不匹配。所以比賽應該是這樣的:

this is a long sentence. it contains a few full stops in it[.] I want to match the full stop after the halfway point. 

this sentence is shorter. it also contains full stops but not many. [no match] 

有沒有辦法做到這一點?我沿着這不工作在所有線的東西:

/[.]{20,}/ 
+1

這聽起來很模糊。請參閱['。{30,}?\ K \。(?=。{30,})'](https://regex101.com/r/P6JIa5/2/),它只會匹配30或30之後的點。更多的字符,如果跟着30個或更多的字符。 –

+0

這很快,我還沒有完成編輯問題。這是不是匹配?它實際上是一個preg_split。 – Hasen

+0

WiktorStribiżew解決方案效果不錯 –

回答

1

your feedback

.{30,}?\K\.(?=.{30,}) 

模式爲你工作。請參閱regex demo

這個想法是找到行長,除以2得到中間的char,並從獲得的值中減去1或2,並用它代替上述模式中限制量詞中的30

圖案的詳細資料

  • .{30,}? - 比換行符字符或多個其他的,但儘可能少任何30個字符,
  • \K - 省略了文本到目前爲止匹配
  • 匹配復位操作
  • \. - 一個點
  • (?=.{30,}) - 一個積極的前瞻,需要存在至少30個除換行符之外的任何字符immediatel y在當前位置的右側。
+1

太好了,謝謝。 – Hasen

相關問題