2017-03-27 83 views
1

對於正則表達式,我還是個新手,並希望將不同的表達式組合在一起。現在所有這些表達式在獨立使用時都能正常工作,但我似乎無法將它們結合到工作字符串中。結合不同的表達式

我想只匹配一個字符串在開頭沒有空白後面。

%string => Match 
% string => No Match 
%%string => No Match 

現在,我有這些表情:

(^[^%]*%[^%]*$) - Matches only one % but with whitespace 
(%\S+)([^\n]+) - Matches strings with the % and no whitespace behind but also matches the %% string that shouldn't be matched 

我想他們陸續

(^[^%]*%[^%]*$)(\S+)([^\n]+) 

複製它們合併,但將無法工作。我知道我在結合他們時做錯了什麼,我只是不知道該怎麼做。

回答

2

您可以使用

^%[^\s%]*$ 

regex demo

詳細

  • ^ - 字符串錨開始
  • % - 百分號
  • [^\s%]* - 一個否定的字符類匹配除空白,零個或多個字符和%
  • $ - 字符串錨點的結尾
+0

這簡單得多。謝謝!即使與整行的空格分隔,我也想匹配整個字符串。像「%string string string」一樣。我試着用這個組合([^ \ n] +)來匹配整行中的所有內容。當我現在追加它不起作用時,我把它放在第二個匹配你的解決方案的組中。 – sarrrrek

+0

這是否意味着您不想僅允許將空格作爲* second *符號?那麼,這使得需求有點不清楚。試試'^%[^ \ s%] [^%] * $'。如果你還需要匹配一個只包含'%'的字符串,你需要一個前瞻 - '^%(?!\ s)[^%] * $' –

+0

準確!這樣可行。再次感謝你!我會看看角色班,所以我可以自己學習。 – sarrrrek