В PHP регулярное выражение должно быть заключено внутри пары разделителей . Разделителем может быть любой небуквенный символ, не обратный слэш, не-пробельный символ; /
, #
, ~
являются наиболее часто используемыми. Обратите внимание, что также можно использовать ограничители стиля скобок, где открывающие и закрывающие скобки являются начальным и конечным разделителями, то есть
, [pattern_goes_here]
и т. Д. Все действительны.
« Неизвестная ошибка модификатора X "обычно возникает в следующих двух случаях:
В этом случае регулярное выражение равно В зависимости от шаблона, анонимная жалоба-модификатор также могла быть о Исправить легко. Просто оберните шаблон регулярного выражения любыми действительными разделителями. В этом случае вы можете выбрать ~ и получить следующее: Если вы получаете эту ошибку, несмотря на использование разделителя, возможно, это связано с тем, что сам шаблон содержит несвязанные вхождения указанного разделителя . Это утомительная работа, если ваш шаблон регулярного выражения содержит так много вхождений символа разделителя. Более чистым способом, конечно же, было бы использование другого разделителя. В идеале символ, который нигде не встречается внутри шаблона регулярного выражения, скажем От здесь : Можно использовать старую добрую DOS attrib команда как это: Или сделать это использование Powershell можно сделать что-то вроде этого: Как Атрибуты в основном поле битовой маски, необходимо быть уверены ясный поле архива при оставлении остальных в покое: Вы можете использовать следующую команду для переключения поведения ]*>. Механизм регулярных выражений рассматривает все от
<
до >
как шаблон регулярного выражения, а затем все как модификаторы. Regex:
]*>
│ │ │ │
└──┬──┘ └────┬─────┘
pattern modifiers
]
здесь неизвестный модификатор, потому что он появляется после закрытия >
. Вот почему PHP выдает эту ошибку. *
, +
, p
, /
или )
или почти любую другую букву / символ. Только imsxeADSUXJu
являются действительными модификаторами PCRE . Как исправить это
~
]*>~
│ │
│ └─ ending delimiter
└───────────────────── starting delimiter
Или разделители escape-кода
/foo[^/]+bar/i
, несомненно, вызовут ошибку. Таким образом, вы можете избежать этого, используя обратную косую черту, если она появляется в любом месте регулярного выражения: /foo[^\/]+bar/i
│ │ │
└──────┼─────┴─ actual delimiters
└─────── escaped slash(/) character
#
- #foo[^/]+bar#i
. More reading:
preg_quote()
) 4 ответа
function Get-FileAttribute{
param($file,$attribute)
$val = [System.IO.FileAttributes]$attribute;
if((gci $file -force).Attributes -band $val -eq $val){$true;} else { $false; }
}
function Set-FileAttribute{
param($file,$attribute)
$file =(gci $file -force);
$file.Attributes = $file.Attributes -bor ([System.IO.FileAttributes]$attribute).value__;
if($?){$true;} else {$false;}
}
attrib -a *.*
$a = get-item myfile.txt
$a.attributes = 'Normal'
PS C:\> $f = get-item C:\Archives.pst
PS C:\> $f.Attributes
Archive, NotContentIndexed
PS C:\> $f.Attributes = $f.Attributes -band (-bnot [System.IO.FileAttributes]::Archive)
PS C:\> $f.Attributes
NotContentIndexed
PS H:\>
$file = (gci e:\temp\test.txt)
$file.attributes
Archive
$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive)
$file.attributes
Normal
$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive)
$file.attributes
Archive
Похожие вопросы: