问题在于:
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检测到如果检测到//然后它不会运行代码的特定行。
答案 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";
~
正在使用备用正则表达式分隔符/{2}\s*cin\s*>>
正在查找cin
的实例,并在其前面添加评论(*SKIP)(*F)
正在跳过cin
|
是正则表达式替换\s*\bcin\s*>>
正在查找所有取消注释的实例 cin
答案 2 :(得分:0)
请参阅demo here
我可能没有想到所有的情况
正则表达式为^(?<!\/\/) *cin
详情:
^
是行首(?<!\/\/)
是一个负面的背后隐藏*
为0或更多空格cin
完全是cin 负面的背后隐藏确保无法在//
之前匹配cin
(在此之前有或没有空格)