我正在使用正则表达式执行某些操作,但下面的代码无论如何都无法在我的计算机上运行。我正在使用XAMPP包。但是,当我在这个网站https://ideone.com/nFkBnC上检查我的PHP代码时,它正在运行。为什么会这样?
<script type="text/javascript">
function(){
//reading of file
}
</script>
相同的代码在此网站上回复“工作”,但在我的电脑上却是假的。
答案 0 :(得分:2)
在Windows中,换行符表示两个字符:换行后的回车:# build GNU GLOBAL
./configure --with-exuberant-ctags=/usr/local/bin/ctags
sudo make install
# use it
export GTAGSCONF=/usr/local/share/gtags/gtags.conf
export GTAGSLABEL=ctags
gtags # invokes Universal Ctags internally
emacs -f gtags-mode # load gtags.el
+ CR
。在使用基于模式的实用程序时,这两个字符几乎有一种表示方式LF
。但类Unix系统代表一个带有一个字符的换行符:\r\n
在Linux上的主机上运行脚本时,您的RegEx LF
有效,因为\R4{3,4}\D44\D
能够匹配换行符\D
(\n
)和立即\x0A
匹配。
44
但在Windows中,事情有所不同。 Here
_________
| |
4 4 4 4 . 4 4 4 . 4 4
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
\x04 \x04 \x04 \x04 \x0A \x04 \x04 \x04 \x0A \x04 \x04
与\D
(CR
)匹配,但\x0D
(LF
)之后永远不会匹配,因为您的引擎会立即查找\x0A
。所以整个模式都失败了。
44
说,我相信 347 是Linux主机上 Here
______________
| |
4 4 4 4 . . 4 4 4 . . 4 4
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
\x04 \x04 \x04 \x04 \x0D \x0A \x04 \x04 \x04 \x0D \x0A \x04 \x04
的输出, 379 来自您的Windows主机。基本数学结果是一个数字,它与输入字符串中的新行数相同:
strlen()
但如果您将RegEx更改为379 - 347 = 32 // CR characters in Windows OS
,您会看到它有效,或者您只是意味着新行,您应该将其更改为:
\R4{3,4}\D{1,2}44\D
\R4{3,4}\R44\R
匹配任何类型的换行符(例如\R
+ CR
,LF
,LF
,...)