首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >否定字符组:匹配“abc”,而不是“abc\”,

否定字符组:匹配“abc”,而不是“abc\”,
EN

Stack Overflow用户
提问于 2010-12-27 18:38:07
回答 2查看 362关注 0票数 0

我需要一个模式,它可以否定一个字符组,也可以否定该否定组中的一个字符。

下面的模式有效,但我想做得更多

代码语言:javascript
运行
复制
(?:(?!'\,).)+

在这里我不想匹配包含‘的字符串,

但是我真正需要的是在否定组中集成一个否定--类似这样的东西。

代码语言:javascript
运行
复制
(?:(?![^\\]'\,).)+

我不想匹配任何转义的引号

匹配:abc',

不匹配:abc\',

啊..。它在进入..。

代码语言:javascript
运行
复制
$str = "'abc\',',asdf";
preg_match("/^('(?:(?!',).)+')/", $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';

它应该输出abc\',,但它输出abc\

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-27 22:54:46

从您最后的评论来看,我认为您正在尝试匹配一个单引号字符串文字,它可能包含用反斜杠转义的单引号。例如,在这个字符串中:

代码语言:javascript
运行
复制
'abc\',','xyz'

...you想要匹配'abc\',''xyz'。这很简单:

代码语言:javascript
运行
复制
$source = "'abc\',','xyz'";
print "$source\n\n";
preg_match_all("/'(?:[^'\\\\]++|\\\\.)*+'/", $source, $matches);
print_r($matches);

产出:

代码语言:javascript
运行
复制
'abc\',','xyz'

Array
(
[0] => Array
    (
        [0] => 'abc\','
        [1] => 'xyz'
    )

)

从一开始就看到了

但是,也许您想要匹配逗号分隔列表中的所有项目,这些条目可能被引用,也可能不被引用--换句话说,CSV (或非常类似的内容)。如果是这样的话,您应该使用一个专用的CSV处理工具;有很多这样的工具。事实上,PHP有一个内置的:http://php.net/manual/en/function.fgetcsv.php

票数 1
EN

Stack Overflow用户

发布于 2010-12-27 18:51:44

/^(?:(?!\\\\',).)+$/似乎做你想做的事。请注意,您必须转义单引号''。请参阅http://ideone.com/ypln2

如果不一定要匹配完整字符串,请删除^$。请参阅http://ideone.com/G67RV

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4540941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档