2016-06-13 41 views
1

我有一個字符串2名的文本:正則表達式來獲得無空間中的字符內的特殊標籤

%胡安%

%胡安岡薩雷斯%

我只想能夠拿到%胡安%,而不是與空間,我一直在嘗試幾個正則表達式運氣。我目前使用:

/%(.*)%/U 

但它得到的東西,我試圖添加和使用[^ \ s]但它不起作用。

請幫忙嗎?

+2

研究字符類。 –

+1

我不知道你是怎麼玩的,但是'/%([^ \ s] +)%/'應該可以。 – AbraCadaver

+1

你想在這種情況下捕捉什麼:'..................................%胡安%% Juan Gonzalez%michel%herbert philippe %% le_gros_Louis%'? *(注意「michel」不在配對'%'中)* –

回答

1

問題是.匹配任何字符,但換行符。 /U非執行模式僅使.*懶惰,並且它捕獲從%直到第一個%到第一個%右側的文本。

如果你的字符串包含1雙%...%,你可以使用

/%(\S+)%/ 

regex demo

\S+模式匹配比其他空白字符1+,整個[^\h%]否定的字符類別匹配任何字符,但水平空間和%符號。

如果您有多個%...%對,你可以使用

/%([^\h%]+)%/ 

another regex demo,其中\h任何水平空白匹配。

PHP demo

$re = '/%([^\h%]+)%/'; 
$str = "%Juan%\n%Juan Gonzalez%"; 
preg_match_all($re, $str, $matches); 
print_r($matches[1]); 
-1

not the one with the Space =不[^ +空間\s + ]在它。

但是,其中也不能有%

作品出來是%([^\s%]+)%

但是,對於額外的信用,你可以/應該也符合一個與它的空間
來樣保證均衡的分隔符設置。

(?:%([^\s%]+)%|%[^%]*%(*SKIP)(*FAIL))

解釋

(?: 
     % 
     ([^\s%]+)     # (1), Tag you need 
     % 
    | 
     % [^%]* % (*SKIP)(*FAIL)  # Consume, but don't match other tags 
)