正则表达式只获取特殊标记内没有空格的字符

时间:2016-06-13 15:45:42

标签: php regex

我在一个字符串中有两个文本:

%涓%

%Juan Gonzalez%

而且我想只能得到%Juan%而不是那个有空间的人,我一直在尝试几个Regexes运气不好。我目前使用:

/%(.*)%/U 

但它得到了两件事,我尝试添加和玩[^ \ s],但它不起作用。

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

问题是.匹配任何字符而不是换行符。 /U ungreedy模式仅使.*延迟,并且会捕获%到第一个%右侧第一个%的文本。< / p>

如果您的字符串包含一对%...% ,则可以使用

/%(\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 :(得分:-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
 )