![](/img/trans.png)
[英]Regex only match if character is not included directly before desired string
[英]RegEx to Match Characters Directly Before Keyword and Directly Afterwards
我對RegEx還不夠好。 我一直在尋找並嘗試編寫自己的書,但沒有成功。 我想搜索一個字符串
Shelf-15-Contains(Item)10-Depo91
我想搜索(),可以通過
/\(([^()]+)\)/g
當RegEx找到()時,我想獲取(),()和里面的所有內容之前的“東西”,然后緊隨其后的東西。 所以,
Contains(Item)10
編輯:另外,我上面的RegEx確保沒有嵌套(),所以一旦我弄清楚了如何匹配前后的內容,如果有多個嵌套層,我應該能夠遞歸地運行它嗎?
怎么樣:
/([^-]+\([^()]+\)[^-]+)/g
要進行前后匹配,請使用其他捕獲組:
while (
$str
=~ m/
([^-]*) # before
\( ( [^()]* ) \) # (in)
(?= ([^-]*) ) # after
/gx
) {
my ($before, $in, $after) = ($1, $2, $3);
...
}
嚴格意義上,正則表達式不能識別嵌套構造(有限狀態機接受字符串)。 Perl的正則表達式引擎提供了用於識別平衡括號的其他結構,但它們很難使用。
http://perldoc.perl.org/perlre.html#Extended-Patterns給出了如何解析位於(??{ code })
和(?PARNO)
平衡括號的示例。
最后,您要解析的字符串的結構似乎是一個-
分隔的列表。 嘗試為要解析的內容找到一個正式的語法,它將幫助您設計程序。
如果不需要處理a(b)c(d)e
,則可以將(?= ([^-]*) )
簡化為([^-]*)
。
恕我直言,這里不需要太復雜。 這是一個正則表達式,它將匹配Contains
,方括號中的所有內容(帶或不帶嵌套的,平衡的或不平衡的)以及可選數字。 它假定有-
解決此建設的影響:
\w+\(.*?\)\d*(?=-|$)
觀看演示
輸入:
Shelf-15-Contains(I(t)e(m))10-Depo91
Shelf-15-Contains(I(t)e(m))-Depo91
火柴:
Contains(I(t)e(m))10
Contains(I(t)e(m))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.