我在一个字符串中有两个文本:
%涓%
%Juan Gonzalez%
而且我想只能得到%Juan%而不是那个有空间的人,我一直在尝试几个Regexes运气不好。我目前使用:
/%(.*)%/U
但它得到了两件事,我尝试添加和玩[^ \ s],但它不起作用。
请帮忙吗?
答案 0 :(得分:1)
问题是.
匹配任何字符而不是换行符。 /U
ungreedy模式仅使.*
延迟,并且会捕获%
到第一个%
右侧第一个%
的文本。< / p>
如果您的字符串包含一对%...%
,则可以使用
/%(\S+)%/
请参阅regex demo
\S+
模式匹配除空格以外的1 +个字符,以及与任何字符匹配但除了水平空格和[^\h%]
符号的整个%
否定字符类。
如果您有多个%...%
对,则可以使用
/%([^\h%]+)%/
请参阅another regex demo,\h
匹配任何水平空格。
$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
)