2010-01-11 77 views
3

我搜索構建了由一些固定部分和一個變量(實際上是業務單元名稱)組成的模式。事實上,該變量包含一些特定的正則表達式字符的可能性很高,這些字符可以被識別爲正則表達式控制字符(即+或*)。轉義部分正則表達式

是否有任何正則表達式標籤注意到模式子部分應僅被視爲文本,並忽略特定的字符含義?

某種:

regex_fixed_part [escape]business + unit[/espace] regex_fixed_part 

這裏,業務+單元將在分析器通過業務\ +單元代替

很明顯,我無法逃脫手動所有正則表達式字符,但我搜索了一個更整潔的方法。

謝謝

+2

你使用哪種語言? – 2010-01-11 09:27:25

+0

我寧願成爲語言無關的。 我在C#中,爲此目的,我可以使用Regex.Escape方法。但我想直接在PHP中使用正則表達式 – camous 2010-01-11 09:45:46

回答

4

很多正則表達式都有一種實用方法,可以自動轉義元字符。 Java使用Pattern.quote(String)來實現這一點,而PHP具有類似的功能:preg_quote(string)。許多PCRE實現也支持\Q\E轉義序列。 \Q將讓正則表達式引擎將其後的所有字符解釋爲純文字直到下一個\E

實施例:

a\Q+*\Eb+ 

將匹配字符串a+*bbb

+0

這正是我正在尋找的(太糟糕了,我沒有找到它自己),不幸的是,似乎沒有在C#中識別| ArgumentException:無法識別的轉義序列\ Q。 – camous 2010-01-11 09:47:04

+1

然後你運氣不好。根據http://www.regular-expressions.info/characters.html,只有JGsoft引擎,Perl,PHP和Java支持'\ Q .. \ E'。看起來你需要Regex.Escape(就像你自己已經提到過的那樣)。 – 2010-01-11 10:07:37

+0

@camous - 根據http://www.regular-expressions.info/refflavors.html,不支持.net。據推測,你必須建立字符串,所以'Regex.Escape'不會太複雜。 – Kobi 2010-01-11 10:10:35

0

什麼語言?

在蟒蛇:

import re 
regex_fixed = re.escape("business + unit") 

在PHP中,使用preg_quote()

+2

這個容量,應該使用preg_quote() – duckyflip 2010-01-11 09:33:06

+0

不,在PHP中你應該使用'preg_quote'。 'addslashes'用於SQL中使用的轉義字符串。 – 2010-01-11 09:34:03

+0

謝謝,更正 – Kimvais 2010-01-11 10:22:27

0

在Java中,如果你想要做手工用Pattern.quote()"\\Qprotected part\\E"

0

[[\]\^\-\\\/?*+$().|]替換爲\$&(反斜槓後跟$&,匹配的字符串),並打開全局標誌。