带有 // 符号的正则表达式

RegEx with the symbol of //

这是问题所在:

int x;
int y;

//cin >>x;
cin >>y;

PHP代码:

<?php

if (preg_match_all("/\x2F\s?cin\s?>>/", $line, $match)){
    if (preg_match_all("/\bcin\s?>>\s?\b/i", $line, $match)){
print " Correct";
}
else
print "cin,not found";
}
else
print "//cin,not found";

?>

如何让它工作例如:

它将直接跳转到 cin>> y 而不是使用 RegEx //cin>>x

这个的主要思想是,我在做一个基于web的c++编译程序,每当学生输入cin时,它就会跳出一个提示框让用户输入他们的值,但是如果学生用//cin输入代码,我的程序仍然会跳出提示框,我希望它使用RegEx来检测,如果检测到//那么它不会运行代码的特定行。

查看 demo here

我可能没有想到所有的情况

正则表达式是 ^(?<!\/\/) *cin

详情:

  1. ^ 是行首
  2. (?<!\/\/) 是负面回顾
  3. * 是 0 或更多 spaces
  4. cin 简直就是 cin

负向后视确保无法匹配 cin 之前的 //(之前有或没有 space)

它不匹配 //cin >>x 因为你的表达式是 /\x2F\s?cin\s?>>/。它以一个以十六进制编码的 / 开头(为什么?)后跟一个或零个空格等等。

为什么每个人都使用正斜杠 (/) 作为正则表达式分隔符,将正则表达式括在引号中 (") 然后使用大量反斜杠进行转义? PHP 使用正则表达式的函数非常灵活,它们 accept a lot of characters 作为正则表达式分隔符。

正则表达式可以这样写:'#//\s?cin\s?>>#'。它现在更具可读性。

您可以在 PHP:

中使用此正则表达式
if (preg_match_all('~/{2}\s*cin\s*>>(*SKIP)(*F)|\s*\bcin\s*>>~', $line))
   print "uncommented cin found";
else
   print "uncommented cin not found";

RegEx Demo

  • ~ 正在使用备用正则表达式定界符
  • /{2}\s*cin\s*>> 正在查找 cin 前面有评论的实例
  • (*SKIP)(*F) 正在跳过 cin
  • 的评论匹配项
  • | 是正则表达式交替
  • \s*\bcin\s*>> 正在查找所有 未注释 cin
  • 的实例