我一直在尝试在PHP中找到一个符合以下内容的字符串:
目前我尝试过这样的事情;
<()\?php eval(^>>
但它似乎没有正确地获得字符串。
编辑:我忘了添加我需要抓取所有文本格式“”并且它跨越多行。
答案 0 :(得分:4)
为什么不使用Select-String?
ls *.php | Select-String "<?php eval"
赋予Select-String
的模式被读作正则表达式。您可以通过指定simpleMatch
开关来执行纯文本匹配:
ls *.php | Select-String "<?php eval" -simpleMatch
以下是获取PowerShell正则表达式实时帮助的命令:
get-help about_regular_expression
编辑:
啊,你没有在你的问题中指明你正在进行REPLACE操作。这有点不同,特别是因为它跨越多行。我会建议这样的事情:
# Retrieve file as a single string.
$contents = [string]::Join("`n", $(Get-Content path\to\file.php))
# Now replace.
$replaced = $contents -replace '(?s)(<\?php eval\()(.*?)(\)\?>)', '$1neweval$3'
所以这样做是寻找<?php eval(
,然后寻找)?>
的LAZILY(重要!),所有这些都是单行模式,所以新行在.*?
部分匹配。 (在问号和斜体之前斜线以逃避它们。)然后它将所有匹配替换为组1(在本例中为<?php eval(
),一些文本,然后组3()?>
)。您可以根据需要使分组变得复杂,以便从匹配中收集信息。
另外,因为您正在尝试使用正则表达式来解析语言而不是语言解析器,所以很多情况下这可能会非常糟糕,可怕的错误。请注意,在确认输出正确之前,不要破坏文件。