Чтобы отклонить совпадения, заканчивающиеся только на .pdf
, вы можете использовать это регулярное выражение,
^(?!.*\.pdf$).*$
с отрицательным прогнозом (?!.*\.pdf$)
, который отклоняет совпадение, если строка заканчивается на .pdf
Вот результаты ваших команд,
PS C:\Users\user> "test.txt" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.docx" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdf.txt" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdf" -match '^(?!.*\.pdf$).*$'
False
PS C:\Users\user> "test.pdd" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdx" -match '^(?!.*\.pdf$).*$'
True
Ваше использование отрицательного символа [^.pdf]
работает только для отрицания определенных символов в строке и не может отклонить последовательность символов, таких как pdf
, для которой вам нужно использовать отрицательный взгляд вперед, как я использовал.
И .?
означает любой символ ноль или один раз, который не является тем, что вы хотели.