2012-01-31 72 views
1

正則表達式的邊界問題:字正則表達式時,尖括號是靠近邊界

\b< low="" number="" low="">\b 

例字符串:

<b22>Aquí se muestran algunos síntomas < low="" number="" low=""> tienen el siguiente aspecto.</b22> 

我不知道爲什麼síntomas<之間的字邊界沒有找到。在>之間的另一邊泰尼恩如何我可能這個邊界更正確地匹配

建議存在同樣的問題?

當我給它下面的輸入時,正則表達式匹配預期:

Aquí se muestran algunos síntomas< low="" number="" low="">tienen el siguiente aspecto. 

除去邊緣條件\ b \bPHRASE\b是不是一種選擇,因爲它不能匹配詞語

的零件

更新

這奏效了:(感謝伊戈爾MostyDKNickC

Regex(String.Format(@"(?<=[\s\.\?\!]){0}(?=[\s\.\?\!])", innerStringToMatch); 

我需要提高我的邊界匹配[\s\.\?\!],使這些優勢正預測先行和回顧後發相匹配。

+1

我相信,'\ B'只會字母數字「字」工作。你可以使用像'[^ A-Za-z0-9 <> _]'這樣的手動字符類。 – 2012-01-31 21:56:59

+1

它看起來像<被算作斷字符,而不是字連續符。 – Nicole 2012-01-31 21:57:24

回答

4

\b是一個零長度匹配,它可以出現在字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。字符字符定義爲[A-Za-z0-9_] *<不是一個單詞字符,這就是爲什麼\b不匹配。

你可以試試下面的正則表達式,而不是((?:)non-capturing parentheses group):

(?:\b|\s+)< low="" number="" low="">(?:\b|\s+) 

*)其實,這並不適用於所有正則表達式引擎是正確的。確切地說,\ b在\w\W之間匹配,其中\w匹配任何字符。正如Tim Pietzcker在對此答案的評論中指出的那樣,「字符字符」的含義在實現方式上有所不同,但我不知道任何地方匹配<>

+1

正則表達式實現之間'\ w'的定義差異很大。在Python中,如果你問它,它會尊重當前的語言環境,在.NET中它完全支持Unicode,在JavaScript中,它確實只匹配ASCII alnums等等...... – 2012-01-31 22:33:52

+0

@TimPietzcker:你是絕對正確的,但是重要的是這種特殊情況是在任何實現中'\ w'不匹配'<' or '>'。 – 2012-01-31 22:37:52

2

我想你要做到以下幾點:

\s< low="" number="" low="">\s