Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,我需要检查一个变量,看看字符串是否以http://或https开头:// 如果它存在,做点别的,做另一件。我该怎么做呢 preg_match('!^https?://!', $string) 这个问题不清楚。如果您只想知道字符串是否以http或https开头,可以使用 $startsWithIt = (strpos($haystack, 'http') === 0); 如果希望支票包含://,则必须执行以下操作: if((strpos($haystack, 'http://') === 0

我需要检查一个变量,看看字符串是否以http://或https开头://

如果它存在,做点别的,做另一件。我该怎么做呢

preg_match('!^https?://!', $string)


这个问题不清楚。如果您只想知道字符串是否以http或https开头,可以使用

$startsWithIt = (strpos($haystack, 'http') === 0);
如果希望支票包含
://
,则必须执行以下操作:

if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
       echo 'Strings starts with http:// or https://';    
}
if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
   echo 'Strings starts with http:// or https://';    
}

如果您需要知道这两个选项中的哪一个,那么问题就不清楚了。如果您只想知道字符串是否以http或https开头,可以使用

$startsWithIt = (strpos($haystack, 'http') === 0);
如果希望支票包含
://
,则必须执行以下操作:

if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
       echo 'Strings starts with http:// or https://';    
}
if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
   echo 'Strings starts with http:// or https://';    
}

如果您需要知道这两个选项中的哪一个,您可能正在寻找:

switch(parse_url($string, PHP_URL_SCHEME)){
    case 'https':
        //do something
    case 'http':
        //something else
    default:
       //anything else you'd like to support?
}

您可能正在寻找:

switch(parse_url($string, PHP_URL_SCHEME)){
    case 'https':
        //do something
    case 'http':
        //something else
    default:
       //anything else you'd like to support?
}
这里还有一个:

function startsWithHttpOrHttps($haystack)
{
    return substr_compare($haystack, 'http://', 0, 7) === 0
        || substr_compare($haystack, 'https://', 0, 8) === 0;
}
在我的机器上,这比我的double
strpos
解决方案(即使添加了
substr
,以防止超过全长字符串)和Regex的性能更好。

这里是另一个:

function startsWithHttpOrHttps($haystack)
{
    return substr_compare($haystack, 'http://', 0, 7) === 0
        || substr_compare($haystack, 'https://', 0, 8) === 0;
}
$startsWithIt = (strpos($haystack, 'http') === 0);
在我的机器上,这比我的double
strpos
解决方案(甚至添加了
substr
,以防止超过全长字符串)和正则表达式的性能要好

$startsWithIt = (strpos($haystack, 'http') === 0);
如果希望支票包含:/,则必须执行以下操作:

if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
       echo 'Strings starts with http:// or https://';    
}
if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
   echo 'Strings starts with http:// or https://';    
}
如果希望支票包含:/,则必须执行以下操作:

if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
       echo 'Strings starts with http:// or https://';    
}
if((strpos($haystack, 'http://') === 0) || 
   (strpos($haystack, 'https://') === 0)) {
   echo 'Strings starts with http:// or https://';    
}

哇,太棒了。我不知道preg_match会给出一个布尔值,如果它是真的还是假的。有正则表达式的文档页吗?现在看,我想我明白了…^是从…开始的吗。。。。?前一个角色可能是s…不知道是什么!平均值。
preg_match()
不返回布尔值。它返回找到的匹配数;当它在第一次匹配后停止时,它只能返回0或1。如果您正在检查返回值,如
If(preg_match()==TRUE){}
中所示,那么您将不会得到预期的结果。虽然这在技术上是正确的,但这是一个糟糕的建议。请参见戈顿的答案,以获得更快的解决方案。“更快”,真的吗?除了Gordon的答案只是检查字符串是否以http开头外,这与检查字符串是否以http://或https://开头并不相同Pixel Developer:向我们展示基准测试的证据,以及单个正则表达式条件测试比两个strpos()测试慢的意义。哇,效果很好。我不知道preg_match会给出一个布尔值,如果它是真的还是假的。有正则表达式的文档页吗?现在看,我想我明白了…^是从…开始的吗。。。。?前一个角色可能是s…不知道是什么!平均值。
preg_match()
不返回布尔值。它返回找到的匹配数;当它在第一次匹配后停止时,它只能返回0或1。如果您正在检查返回值,如
If(preg_match()==TRUE){}
中所示,那么您将不会得到预期的结果。虽然这在技术上是正确的,但这是一个糟糕的建议。请参见戈顿的答案,以获得更快的解决方案。“更快”,真的吗?除了Gordon的答案只是检查字符串是否以http开头外,这与检查字符串是否以http://或https://开头不同。Pixel Developer:向我们展示基准测试的证据,以及单个正则表达式条件测试比两个strpos()测试慢的意义。一个合理的答案。我希望人们停止为琐碎的字符串匹配投票regex。这只会检查字符串是否以
http
https
开头,而不是以
http://
https://
@Gumbo@silenghost开头。不,它只检查
http
。我务实地假设OP只是想知道是否有URL方案。正如我所说的,这个问题对于实际用例是模糊的,或者从httpanythingelse开始,所以从技术上讲它不符合要求。当然,您可以将其修改为(strpos($haystack,'http://')==0 | | | strpos($haystack,'https://'))==0),但这不会改变SilentGhost语句的有效性。这是一个合理的答案。我希望人们停止为琐碎的字符串匹配投票regex。这只会检查字符串是否以
http
https
开头,而不是以
http://
https://
@Gumbo@silenghost开头。不,它只检查
http
。我务实地假设OP只是想知道是否有URL方案。正如我所说的,这个问题对于实际用例是模糊的,或者从httpanythingelse开始,所以从技术上讲它不符合要求。当然,您可以将其修改为(strpos($haystack,'http://')==0 | | | strpos($haystack,'https://')==0),但这不会改变SilentGhost语句的有效性;switch($urlScheme){会更奇妙,但这仍然是一个很棒的答案。
$urlScheme=parse\u url($string,PHP\u url\u SCHEME);switch($urlScheme){
会更奇妙,但这仍然是一个很棒的答案。