RegEx的符号为//

时间:2015-01-08 14:32:34

标签: php regex

问题在于:

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";

?>

如何让它起作用:

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

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

3 个答案:

答案 0 :(得分:1)

它与//cin >>x不匹配,因为您的表达式为/\x2F\s?cin\s?>>/。它以单个/十六进制编码开始(为什么?)后跟一个或零空格,依此类推。

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

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

答案 1 :(得分:1)

您可以在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

答案 2 :(得分:0)

请参阅demo here

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

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

详情:

  1. ^是行首
  2. (?<!\/\/)是一个负面的背后隐藏
  3. *为0或更多空格
  4. cin完全是cin
  5. 负面的背后隐藏确保无法在//之前匹配cin(在此之前有或没有空格)