大家。我有一个问题,我无法解决它。
模式:\'(.*?)\'
源字符串:'abc', 'def', 'gh\'', 'ui'
我需要[abc]
,[def]
,[gh\']
,[ui]
但我得到[abc]
,[def]
,[gh\]
,[, ]
等。
有可能吗?提前致谢
答案 0 :(得分:1)
是的,这些比赛是可能的。
但是如果你想询问是否有可能得到引号内的内容,最简单的方法是用逗号分割(最好通过CSV解析器)并修剪任何尾随空格。
否则,您可以尝试类似:
\'((?:\\\'|[^\'])+)\'
哪个匹配\'
或非引用字符,但会对\\'
等内容失败...
您可能在这种情况下使用的更长,更慢的正则表达式是:
\'((?:(?<!\\)(?:\\\\)*\\\'|[^\'])+)\'
在PHP中:
preg_match_all('/\'((?:(?<!\\)\\\'|[^\'])+)\'/', $text, $match);
或者如果您使用双引号:
preg_match_all("/'((?:(?<!\\\)\\\'|[^'])+)'/", $text, $match);
当它应该正常工作时,不确定为什么(?<!\\)
(我的意思是一个字面反斜杠)出现错误。如果模式更改为(?<!\\\\)
,则可以使用。
preg_match_all("/'((?:[^'\\]|\\.)+)'/", $text, $match);
答案 1 :(得分:1)
PHP代码:使用负面背后隐藏
$s = "'abc', 'def', 'ghf\\\\', 'jkl\'f'";
echo "$s\n";
if (preg_match_all("~'.*?(?<!(?:(?<!\\\\)\\\\))'~", $s, $arr))
var_dump($arr[0]);
<强> OUTOUT:强>
array(4) {
[0]=>
string(5) "'abc'"
[1]=>
string(5) "'def'"
[2]=>
string(7) "'ghf\\'"
[3]=>
string(8) "'jkl\'f'"
}
答案 2 :(得分:0)
<?php
// string to extract data from
$string = "'abc', 'def', 'gh\'', 'ui'";
// make the string into an array with a comma as the delimiter
$strings = explode(",", $string);
# OPTION 1: keep the '
// or, if you want to keep that escaped single quote
$replacee = ["'", " "];
$strings = str_replace($replacee, "", $strings);
$strings = str_replace("\\", "\'", $strings);
# OPTION 2: remove the ' /// uncomment tripple slash
// replace the single quotes, spaces, and the backslash
/// $replacee = ["'", "\\", " "];
// do the replacement, the $replacee with an empty string
/// $strings = str_replace($replacee, "", $strings);
var_dump($strings);
?>
答案 3 :(得分:-1)
相反,您应该使用str_getcsv
str_getcsv("'abc', 'def', 'gh\'', 'ui'", ",", "'");