是否可以在某種模式之後匹配所有內容?正則表達式 - 在指定模式後匹配
starting-this is my string-
例如與上面的例子中我知道該字符串將與一些字母和一個連字符,然後我想要的值其將由另一連字符被終止啓動。
所以我想找到的例子:「這是我的字符串」
是否可以用正則表達式來做到這一點?
是否可以在某種模式之後匹配所有內容?正則表達式 - 在指定模式後匹配
starting-this is my string-
例如與上面的例子中我知道該字符串將與一些字母和一個連字符,然後我想要的值其將由另一連字符被終止啓動。
所以我想找到的例子:「這是我的字符串」
是否可以用正則表達式來做到這一點?
取決於。 RegExp的每個實現都不同。例如,你不能用JavaScript做,但你可以用Ruby。你正在尋找的功能稱爲「積極向後看」。
/(?<=starting-)this is my string(?=-)/
你有正回顧後,在這裏積極前瞻的例子:前者是一個零寬度斷言背後「這個」你「的起始 - 」,而後者是一個零寬度斷言在「字符串」之後你有「 - 」。
RegExp的大部分口味都是超前的。有些人(如JS)不具有向後看。
如果你的沒有,你可以做一些技巧。最簡單的一種是隻是做一個非正則表達式反向預搜索,並捕獲所需的字符串:
/starting-(this is my string)-/
然而,由於比賽不能重疊,你可能無法有時使用這種方法。例如,如果你試圖以匹配散列包圍的話,並嘗試
/#(\w+)#/g
,並嘗試它像一個字符串「我的#馬#喜歡#吃#乾草#的#早餐#」,你不僅會得到「馬」,「吃」和「換」,因爲「#吃#」和「#爲#」的比賽會消耗「乾草」和「早餐」周圍的散列。
另一種是反轉字符串和模式,並使用lookahead代替;但是這樣看起來很糟糕,而且只有當你不需要同時模式下的前瞻和後視時纔有效。
是的。使用這個:
(?<=textyouwanttomatchafter).*
這個例子可以在java中使用,並且在其他語言中應該是類似的。
如果您告訴我們您正在使用的語言,這將有所幫助。對於Perl,這將工作:
/starting-([^-]+)-/
該字符串將存儲在$ 1。一內膽:
$ perl -le '"starting-this is my string-" =~ m/starting-([^-]+)-/; print $1;'
this is my string
(function() {
var str = 'starting-this is my string-';
var matches = str.match(/starting-([^-]+)-/);
alert(matches[1]);
})();
男人,你就錯了約JS。考慮''開始 - 這是我的字符串 - 「。match(/^starting - ([^ - ] *) - /)'。 – twil
@twil:我確實考慮過它,並拒絕它 - 你可以閱讀我更新的答案,理由。具體來說,嘗試使用您的方法從我的示例中匹配「馬」,「吃」,「乾草」,「爲」,「早餐」。 – Amadan
你的回答很好,但是你用另一個問題代替了另一個問題,並且在提出問題時陳述錯誤。 – twil