php代码中未显示预期的输出
代码如下:php代码中未显示预期的输出,php,regex,string,Php,Regex,String,代码如下: <?php $pattern =' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; $text = "kdaiuyq7e611422^^$^vbnvcn^vznbsjhf"; $text_split = str_split($text,1); $data = ''; foreach($text_split as $value){ if (preg_match("/".$value."/",
<?php
$pattern =' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$text = "kdaiuyq7e611422^^$^vbnvcn^vznbsjhf";
$text_split = str_split($text,1);
$data = '';
foreach($text_split as $value){
if (preg_match("/".$value."/", $pattern )){
$data = $data.$value;
}
if (!preg_match('/'.$value.'/', $pattern )){
break;
}
}
echo $data;
?>
预期产出:
kdaiuyq7e611422
请帮助我编辑我的代码错误。在模式中没有^或$。但preg_match正在显示匹配,这是值得怀疑的
<?php
$pattern = ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$text = "kdaiuyq7e611422^^$^vbnvcn^vznbsjhf";
$text_split = str_split($text,1);
$data = '';
foreach($text_split as $value){
if (preg_match("/".preg_quote($value)."/", $pattern )){
$data = $data.$value;
}
if (!preg_match('/'.preg_quote($value).'/', $pattern )){
break;
echo "not matched";
}
}
echo $data;
?>
您的字符串$text
具有与字符串$pattern
开头匹配的^
因此,preg_match('/^/',$pattern)
将返回true,然后^
将附加到$data
您应该将
^
作为原始字符转义,而不是使用preg\u match(“/\^/”,$pattern)
的特殊字符,方法是使用preg\u quote()
,它将转义特殊字符。没有必要像这样拆分字符串,正则表达式的要点是,您可以指定表达式中的所有条件。您可以将整个代码压缩为:
$pattern = '/^[[:word:] ]+/';
$text = 'kdaiuyq7e611422^^$^vbnvcn^vznbsjhf';
preg_match($pattern, $text, $matches);
echo $matches[0];
Kris已经准确地分离出你的方法中的逃逸是活动扳手。这可以通过
preg_quote()
或\Q
中的包装模式字符来解决<代码>\E(强制按字面解释字符)
在你的方法上贴上绷带(就像你在回答自己的问题时所做的那样)无助于你看到你应该做什么
我建议您取消字符掩码、str_split()
和preg_match()的循环调用。只需一个preg\u match()
调用,您的任务就可以更简单/高效/直接地完成。以下是完全遵守角色掩码的干净方法:
代码:()
输出:
kdaiuyq7e611422
miknik的方法接近于此,但鉴于您的问题要求,它并没有保持100%的准确性。我会解释:
[:word::
是一个(功能类似于\w
),表示字母(大写和小写)、数字和下划线。不幸的是,对于miknik来说,下划线不在您的通缉字符列表中,因此这会使模式稍微不准确,并且可能对您的项目不可靠。可能使用preg_quote($value)
?您做了什么?只有代码的答案很少有帮助。请编辑并更新您的答案。我的代码提供了所需的输出。当前输出:kdaiuyq7e611422^^$^vbnvcn^vznbsjhf预期输出:kdaiuyq7e611422@AsifIqbal这不是你应该执行任务的方式,请阅读我的答案。我希望你能在你的项目中使用我的方法。
$text = "kdaiuyq7e611422^^$^vbnvcn^vznbsjhf";
echo preg_match('/^[a-z\d ]+/i',$text,$out)?$out[0]:'No Match';
kdaiuyq7e611422