我需要一个模式,它可以否定一个字符组,也可以否定该否定组中的一个字符。
下面的模式有效,但我想做得更多
(?:(?!'\,).)+在这里我不想匹配包含‘的字符串,
但是我真正需要的是在否定组中集成一个否定--类似这样的东西。
(?:(?![^\\]'\,).)+我不想匹配任何转义的引号
匹配:abc',
不匹配:abc\',
啊..。它在进入..。
$str = "'abc\',',asdf";
preg_match("/^('(?:(?!',).)+')/", $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';它应该输出abc\',,但它输出abc\
发布于 2010-12-27 22:54:46
从您最后的评论来看,我认为您正在尝试匹配一个单引号字符串文字,它可能包含用反斜杠转义的单引号。例如,在这个字符串中:
'abc\',','xyz'...you想要匹配'abc\','和'xyz'。这很简单:
$source = "'abc\',','xyz'";
print "$source\n\n";
preg_match_all("/'(?:[^'\\\\]++|\\\\.)*+'/", $source, $matches);
print_r($matches);产出:
'abc\',','xyz'
Array
(
[0] => Array
    (
        [0] => 'abc\','
        [1] => 'xyz'
    )
)从一开始就看到了
但是,也许您想要匹配逗号分隔列表中的所有项目,这些条目可能被引用,也可能不被引用--换句话说,CSV (或非常类似的内容)。如果是这样的话,您应该使用一个专用的CSV处理工具;有很多这样的工具。事实上,PHP有一个内置的:http://php.net/manual/en/function.fgetcsv.php
发布于 2010-12-27 18:51:44
/^(?:(?!\\\\',).)+$/似乎做你想做的事。请注意,您必须转义单引号''。请参阅http://ideone.com/ypln2
如果不一定要匹配完整字符串,请删除^和$。请参阅http://ideone.com/G67RV
https://stackoverflow.com/questions/4540941
复制相似问题