Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 匹配标记的正则表达式包装为%_Php_Regex - Fatal编程技术网

Php 匹配标记的正则表达式包装为%

Php 匹配标记的正则表达式包装为%,php,regex,Php,Regex,我让用户输入了可能输入错误的文本,我正试图使用PHP查找 有效的“标记”是以百分比符号包装的任意数量的单词字符-因此%blah%%blah\u moreblah%。基本上,我在寻找用户可能忘记放置前导或尾随“%”的令牌。我也在寻找有效格式的令牌——在我的代码中,所有可替换的令牌都已经被替换 因此,我要寻找的三种情况是(借用正则表达式语法):%\w+,%\w+%,或\w+% 在英语中,我要寻找的是“一个以%开头和/或以%结尾的字符串,它只包含单词字符” 到目前为止,我使用的正则表达式是:(%*\w

我让用户输入了可能输入错误的文本,我正试图使用PHP查找

有效的“标记”是以百分比符号包装的任意数量的单词字符-因此
%blah%
%blah\u moreblah%
。基本上,我在寻找用户可能忘记放置前导或尾随“%”的令牌。我也在寻找有效格式的令牌——在我的代码中,所有可替换的令牌都已经被替换

因此,我要寻找的三种情况是(借用正则表达式语法):
%\w+
%\w+%
,或
\w+%

在英语中,我要寻找的是“一个以%开头和/或以%结尾的字符串,它只包含单词字符”

到目前为止,我使用的正则表达式是:
(%*\w+%*)
,但您会注意到它匹配每一个单词。我一直坚持匹配,至少需要一个前导或尾随的%


编辑:最初我尝试使用自己的正则表达式找到所有3种情况。但是,我发现用于在第一种情况下查找令牌的正则表达式也会在第二种情况下查找令牌,只是没有尾随符号%。例如,
/(\w+)/
,当对照%tware%之前的
%进行检查时,将匹配
%tware%
之前的
%和
%tware

若要匹配
%
中包含的令牌,或两侧都有
%
,请使用

(?=\w*%)%*\w+%*

这是我添加了正向前瞻的模式。
(?=\w*%)
仅限于在出现零个或多个单词字符后出现
%
的匹配


还要注意的是,
%*
将匹配零个或多个百分号,它可能匹配
%%word%%
。如果它不是您需要的,并且如果您需要匹配1或0个
%
s,只需将
*
替换为
量词。

$input_lines = "Hello this is a %string% with %some_words in it just for demo% purposes.";

preg_match_all("/\s[\w_\-]+%\.?|%[\w_\-]+(%|\s|\.)/", $input_lines, $output_array);
array(
    0   =>  %string%
    1   =>  %some_words 
    2   =>   demo%
)
将输出以下内容:

$input_lines = "Hello this is a %string% with %some_words in it just for demo% purposes.";

preg_match_all("/\s[\w_\-]+%\.?|%[\w_\-]+(%|\s|\.)/", $input_lines, $output_array);
array(
    0   =>  %string%
    1   =>  %some_words 
    2   =>   demo%
)

请注意,这将捕获有效的案例,以及您要查找的打字错误。

为什么不使用替换?感谢您的回答。不幸的是,该正则表达式不符合我的第二个要求,即一个包含前导和尾随的单词。我已更新了我的问题,以使其更清楚,因为我可以看到您是如何做到这一点的假设只需要一个前导或尾随%,但不需要两者。好的,那么两边,或者只有一个。使用前视:我认为前视/后视是我想要的,但是我的正则表达式Fu没有那么高级。你介意让前视正则表达式成为一个正式答案,我会接受它吗?再次感谢你的帮助。完成。不是很难吗对我来说,使用嵌套分组更困难。