Php 获取特定字符后的值并在其他特定字符上停止regex
我尝试在一个特定的charchter之后获取值,并在其他特定的charchter上停止。这就是我试过的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, $
$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);
?>
正是我想要的。正是我想要的。正是我想要的。正是我想要的。