我试图编写一个正则表达式来查找字符串中的js对象。
$test = "var contactData = {
'address': '',
'email': '',
'phone': '09121269001',
'fax': ''
};";
preg_match_all('/^contactData\s[=:]\s{(.*)};$/m', $test, $matches, PREG_PATTERN_ORDER);
var_dump($matches);
这是我得到的结果。
array (size=2)
0 =>
array (size=0)
empty
1 =>
array (size=0)
empty
答案 0 :(得分:1)
这将是正则表达式:
def is_element_present(driver, how, what):
try:
driver.find_element(by=how, value=what)
return True
except NoSuchElementException as e:
try:
driver.find_element(by=`xpath`, value=`next page xpath`).click()
return True
except NoSuchElementException as nse:
return False
此处发布的概念证明: https://xrg.es/#12zb4f1
/\'(.*)\'\: \'(.*)\'/
所以preg_match_all("/\'(.*)\'\: \'(.*)\'/", "$test", $matches, null, 0);
= = $matches[1][2]
因此phone
= = $matches[2][2]
答案 1 :(得分:1)
如果正则表达式是您想要的,那么我认为这是一个很好的解决方案。
http://www.phpliveregex.com/p/kOh
preg_match_all("/'(.*?)'/", $test, $Matches);
正如您从图片中看到的$match[0]
和[1]
是地址,[2]
和[3]
电子邮件等等。
$test = "var contactData = {
'address': 'foobar',
'email': 'fofo@foo.com',
'phone': '09121269001',
'fax': '1234'
};";
preg_match_all("/'(.*?)'/", $test, $Matches);
foreach($Matches[1] as $val){
$$val = next($Matches[1]);
}
echo $address . "\n" . $email ."\n" . $phone ."\n". $fax;
输出:
foobar
fofo@foo.com
09121269001
1234
答案 2 :(得分:1)
m
修饰符使锚点(^
和$
)一次匹配1行。您的第一行也以var
开头,因此您无法使用主要锚点,或者您需要添加它。您可以将s
修饰符与上述方法中的任何一种一起使用,这样就可以了。
/contactData\s[=:]\s\{(.*)\};$/s
或
/^var contactData\s[=:]\s\{(.*)\};$/s
演示:https://regex101.com/r/xCE6UD/2/,https://regex101.com/r/xCE6UD/1/
你也应该逃避{}
。当.*
为贪婪时,您将匹配字符串中的最后一个}
,如果您有多个JSON字符串则不正确。另一种方法也可以是:
contactData\s[=:]\s\{([^}]+)};$
答案 3 :(得分:0)
当json_decode()
专门设计用于执行此任务时,禁止使用正则表达式解析json对象。它只需要在解码之前准备好字符串。 json_decode()
完成了准备易于访问的关联数组的所有必要工作。
以下代码段将首先为您提供最终结果,然后 Tarantino 它将为您提供导致它的所有步骤。
代码:(Demo)
$test = "var contactData = {
'address': '',
'email': '',
'phone': '09121269001',
'fax': ''
};";
// step #4 / final output -> use json_decode to generate associative array:
var_export(json_decode(rtrim(strstr(str_replace("'",'"',$test),'{'),';'),true));
echo "\n\n";
// step #1 -> swap single quotes for double quotes:
var_export(str_replace("'",'"',$test));
echo "\n";
// step #2 -> extract json object start to end of string:
var_export(strstr(str_replace("'",'"',$test),'{'));
echo "\n";
// step #3 -> trim trailing semi-colon from substring (several funcs can do this part)
var_export(rtrim(strstr(str_replace("'",'"',$test),'{'),';'));
输出:
array (
'address' => '',
'email' => '',
'phone' => '09121269001',
'fax' => '',
)
'var contactData = {
"address": "",
"email": "",
"phone": "09121269001",
"fax": ""
};'
'{
"address": "",
"email": "",
"phone": "09121269001",
"fax": ""
};'
'{
"address": "",
"email": "",
"phone": "09121269001",
"fax": ""
}'