Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 获取特定字符后的值并在其他特定字符上停止regex_Php_Regex - Fatal编程技术网

Php 获取特定字符后的值并在其他特定字符上停止regex

Php 获取特定字符后的值并在其他特定字符上停止regex,php,regex,Php,Regex,我尝试在一个特定的charchter之后获取值,并在其他特定的charchter上停止。这就是我试过的 $whois = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale'; $data = preg_match_all('/:\s(.*?)\s/', $whois, $

我尝试在一个特定的charchter之后获取值,并在其他特定的charchter上停止。这就是我试过的

$whois = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';
$data = preg_match_all('/:\s(.*?)\s/', $whois, $data_whois);
var_dump($data_whois[1]);
谁是雅虎的

电流输出

  1 => string 'Domain' (length=6)
  2 => string 'Yahoo!' (length=6)
  3 => string '701' (length=3)
  4 => string 'Sunnyvale' (length=9)
预期产量

  1 => string 'Domain Administrator' (length=6)
  2 => string 'Yahoo! Inc.' (length=6)
  3 => string '701 First Avenue' (length=3)
  4 => string 'Sunnyvale' (length=9)

但这只是第一个字。我相信那是因为我也试过了第二个词,但是如果这个值没有第二个单词,那么它将取单词
注册人
,因此我需要停止注册人,但不知道具体是如何进行的。

因为您使用的是惰性量词
*?
,后跟一个
\s
匹配将在第一个空白字符处停止

解决此问题的一种方法是使用以下事实:
*?
后面必须跟一个空格和单词“registent”或字符串的结尾:

/:\s(.*?)(?:\sRegistrant\b|\s*$)/
另一种可能的方法是使用
preg\u split

$str = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';

$pattern = '~\s*\bRegistrant[^:]+:\s*~';
$result = preg_split($pattern, $str, -1, PREG_SPLIT_NO_EMPTY);

由于使用的是惰性量词
*?
,后跟
\s
,因此匹配将在第一个空白字符处停止

解决此问题的一种方法是使用以下事实:
*?
后面必须跟一个空格和单词“registent”或字符串的结尾:

/:\s(.*?)(?:\sRegistrant\b|\s*$)/
另一种可能的方法是使用
preg\u split

$str = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';

$pattern = '~\s*\bRegistrant[^:]+:\s*~';
$result = preg_split($pattern, $str, -1, PREG_SPLIT_NO_EMPTY);

由于使用的是惰性量词
*?
,后跟
\s
,因此匹配将在第一个空白字符处停止

解决此问题的一种方法是使用以下事实:
*?
后面必须跟一个空格和单词“registent”或字符串的结尾:

/:\s(.*?)(?:\sRegistrant\b|\s*$)/
另一种可能的方法是使用
preg\u split

$str = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';

$pattern = '~\s*\bRegistrant[^:]+:\s*~';
$result = preg_split($pattern, $str, -1, PREG_SPLIT_NO_EMPTY);

由于使用的是惰性量词
*?
,后跟
\s
,因此匹配将在第一个空白字符处停止

解决此问题的一种方法是使用以下事实:
*?
后面必须跟一个空格和单词“registent”或字符串的结尾:

/:\s(.*?)(?:\sRegistrant\b|\s*$)/
另一种可能的方法是使用
preg\u split

$str = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';

$pattern = '~\s*\bRegistrant[^:]+:\s*~';
$result = preg_split($pattern, $str, -1, PREG_SPLIT_NO_EMPTY);

您的字段似乎正好有两个单词,第二个单词后跟
。如果是,那么您可以尝试下面的正则表达式

: \K.*?(?= \S+ \S+:|$)

PHP代码应该是

<?php
$data = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';
$regex =  '~: \K.*?(?= \S+ \S+:|$)~';
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

您的字段似乎正好有两个单词,第二个单词后跟
。如果是,那么您可以尝试下面的正则表达式

: \K.*?(?= \S+ \S+:|$)

PHP代码应该是

<?php
$data = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';
$regex =  '~: \K.*?(?= \S+ \S+:|$)~';
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

您的字段似乎正好有两个单词,第二个单词后跟
。如果是,那么您可以尝试下面的正则表达式

: \K.*?(?= \S+ \S+:|$)

PHP代码应该是

<?php
$data = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';
$regex =  '~: \K.*?(?= \S+ \S+:|$)~';
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

您的字段似乎正好有两个单词,第二个单词后跟
。如果是,那么您可以尝试下面的正则表达式

: \K.*?(?= \S+ \S+:|$)

PHP代码应该是

<?php
$data = 'Registrant Name: Domain Administrator Registrant Organization: Yahoo! Inc. Registrant Street: 701 First Avenue Registrant City: Sunnyvale';
$regex =  '~: \K.*?(?= \S+ \S+:|$)~';
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

正是我想要的。正是我想要的。正是我想要的。正是我想要的。