Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使用正则表达式否定字符串_Visual Studio_Regex_Regex Negation - Fatal编程技术网

Visual studio 如何使用正则表达式否定字符串

Visual studio 如何使用正则表达式否定字符串,visual-studio,regex,regex-negation,Visual Studio,Regex,Regex Negation,有人能告诉我如何使用正则表达式对字符串求反吗? 我想找到所有以公共类开头的行,然后是任何东西,除了第一个、第二个以及最后的任何其他东西 例如,在结果中,我希望看到的是public class base,而不是public class myfirst:base 任何人都能帮我吗???使用消极前瞻: public\s+class\s+(?!first|second).+ 使用负前瞻: public\s+class\s+(?!first|second).+ 这里有些东西应该适合你 /public\

有人能告诉我如何使用正则表达式对字符串求反吗? 我想找到所有以
公共类
开头的行,然后是
任何东西,除了第一个、第二个
以及最后的任何其他东西

例如,在结果中,我希望看到的是
public class base
,而不是
public class myfirst:base

任何人都能帮我吗???

使用消极前瞻:

public\s+class\s+(?!first|second).+

使用负前瞻:

public\s+class\s+(?!first|second).+

这里有些东西应该适合你

/public\sclass\s(?:[^fs\s]+|(?!first|second)\S)+(?=\s|$)/
第二个外观可以将head更改为$(行尾)或另一个适用于特定用例的锚点,比如“{”

编辑:尝试将最后一部分更改为:

(?=\s|$)

这里有些东西应该适合你

/public\sclass\s(?:[^fs\s]+|(?!first|second)\S)+(?=\s|$)/
第二个外观可以将head更改为$(行尾)或另一个适用于特定用例的锚点,比如“{”

编辑:尝试将最后一部分更改为:

(?=\s|$)

其他两个答案都很接近,但可能由于不同的原因而失败

public\s+class\s+(?:(?!first|second).)+
请注意,在负前瞻周围有一个(非捕获)组,以确保它不仅仅适用于第一个位置

而且该组限制较少-因为
排除了换行符,它使用它代替
\s
,并且
$
不是必需的-这将排除指定的单词并匹配其他单词

没有斜杠包装表达式,因为并非所有内容都需要斜杠,并且可能会让那些只使用基于字符串的正则表达式的人感到困惑

如果仍然失败,请发布错误匹配或遗漏的确切内容,以及您使用的语言/ide

更新:
事实证明,您使用的是Visual Studio,它有自己的功能,这是出于某种难以理解的原因。因此,您可能希望尝试以下方法:

public:b+class:b+~(first|second)+$

我没有办法测试它-如果它不起作用,试着删除
$
,否则你必须找到一个VS用户。或者更好的是,负责这个愚蠢的非标准正则表达式的VS工程师。

其他两个答案都很接近,但可能由于不同的原因失败

public\s+class\s+(?:(?!first|second).)+
请注意,在负前瞻周围有一个(非捕获)组,以确保它不仅仅适用于第一个位置

而且该组限制较少-因为
排除了换行符,它使用它代替
\s
,并且
$
不是必需的-这将排除指定的单词并匹配其他单词

没有斜杠包装表达式,因为并非所有内容都需要斜杠,并且可能会让那些只使用基于字符串的正则表达式的人感到困惑

如果仍然失败,请发布错误匹配或遗漏的确切内容,以及您使用的语言/ide

更新:
事实证明,您使用的是Visual Studio,它有自己的功能,这是出于某种难以理解的原因。因此,您可能希望尝试以下方法:

public:b+class:b+~(first|second)+$

我没有办法测试它-如果它不起作用,请尝试删除
$
,否则您必须找到一个VS用户。或者更好的是,负责这个愚蠢的非标准正则表达式的VS工程师。

如果Peter是正确的,并且您正在使用Visual Studio的
查找
功能,这应该可以工作:

^:b*public:b+class:b+~(first|second):i.*$
:b
匹配空格或选项卡
~(…)
是VS如何进行负前瞻的
:i
匹配C/C++标识符

其余的是标准正则表达式语法:
^
用于行首
$
用于行尾
用于任何字符
*
用于零或更多
+
用于一个或多个

|
用于替换

如果Peter是正确的,并且您正在使用Visual Studio的
查找
功能,则此功能应该可以工作:

^:b*public:b+class:b+~(first|second):i.*$
:b
匹配空格或选项卡
~(…)
是VS如何进行负前瞻的
:i
匹配C/C++标识符

其余的是标准正则表达式语法:
^
用于行首
$
用于行尾
用于任何字符
*
用于零或更多
+
用于一个或多个

|
对于交替

你用什么语言编写?你使用什么正则表达式风格?这是学习正则表达式的一个非常好的资源:首先,这是什么语言?(JavaScript、PHP、C#等)?第二,在发布的问题中存在矛盾。它说你想找到“除第一、第二之外的任何东西”,但您的示例使用的是
myfirst
!它是哪一种?最后,这个字符串是多行的吗?根据对我下面答案的评论,它看起来像是Visual Studio find dialog,它有自己的非标准正则表达式语法。我不知道它有自己的正则表达式语法!您使用的是什么语言?您使用的是什么正则表达式风格?这是一个版本学习regexps的绝佳资源:首先,这是什么语言?(JavaScript、PHP、C#等)?其次,发布的问题中存在矛盾。它说你想找到“除第一、第二之外的任何东西”,但您的示例使用的是
myfirst
!是哪一个?最后,这个字符串是多行的?根据对我下面答案的评论,它看起来像是Visual Studio find dialog,它有自己的非标准正则表达式语法。我不知道它有自己的正则表达式语法!不幸的是,它没有返回任何东西。我正在使用c#。结果是:查找所有“public\s+class\s+(?:(?!first | second)。+”,子文件夹,查找结果1,“整个解决方案”匹配行:0个匹配文件:0个搜索的总文件:13当您搜索
public\s+class\s+。
时,这13个文件中有多少匹配?嗯,听起来您使用的是Visual Studio IDE搜索(不是C代码)。VS中的正则表达式实现完全失败了,这就是为什么这些都失败了。我也会用VS解决方案更新我的答案。@Peter Boughton它没有返回任何内容,但它没有返回任何内容