我在格式化 参数中的正则表达式时遇到了一些困难\verb
。感谢您的帮助。
\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{ragged2e}
\newcolumntype{L}[1]{>{\RaggedRight}X} % new
\input{structure.cls} %
\begin{document}
\begin{table}[!htp] % new
\small\linespread{0.84}\selectfont % reduce interline spaces
\setlength\tabcolsep{4pt} % new
\setcellgapes{2pt} % new
\makegapedcells
\begin{tabularx}{\linewidth}{|l|L{4cm}|l|} % new
\hline
\bfseries{Pour trouver} & \bfseries\makecell{RegEx à utiliser} & \bfseries{Exemple} \\
\hline
E-mail & \verb+[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]+ & [email protected] \\
\hline
Numéros de sécurité sociale américains & \verb+[^[a-z]+\$]+ & 513-84-7329 \\
\hline
Adresses IPV4 & \verb+[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]+ & 212.23.2.110\\
\hline
Dates au format MM/JJ/AAAA & \verb+[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]+ & Un seul mot non vide en minuscule \\
\hline
Numéros de cartes Mastercard & \verb+[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]+ & Exemple \\
\hline
Numéros de cartes Visa & \verb+[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]+ & Exemple \\
\hline
Numéros de cartes American Express & \verb+[^3[47][0-9]{13}\$]+ & Exemple \\
\hline
Codes ZIP US & \verb+[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]+ & Exemple \\
\hline
Chemins d’accès à des fichiers & \verb+[\\[^\\]+\$]+\$]+ & Exemple \\
\hline
URL & \verb+[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]+ & Exemple
\hline
\end{tabularx}
\caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}
\end{table}
\end{document}
Latex 文件头
\documentclass[12pt]{book}
\usepackage[paperwidth=20cm, paperheight=29cm, margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{pifont} %Sutilise avec \usepackage{amsmath} pour la commande $\text{\ding{113}} \Delta$
\usepackage{amsmath}
\usepackage{adjustbox}
\usepackage[activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100,stretch=10,shrink=10]{microtype}
\usepackage{multicol}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{listings}
\usepackage{ragged2e}
\usepackage[shortlabels]{enumitem} % Pour \begin{enumerate}a)
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{paracol} %Permet de diviser la page en 2 colonnes
\usepackage{titlesec} %Pour modifier le fomat du titre de section subparagraph
\usepackage{cancel} %Pour écrire chiffres barrés
\newcolumntype{L}[1]{>{\RaggedRight}X} % new
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
\usepackage{pdflscape} % for 'landscape' env.
\usepackage{booktabs} % for well-spaced horizontal rules
\usepackage{xurl} % for '\path' macro, allow line breaks at arbitrary points
\titleformat*{\subparagraph}{\bfseries\itshape} %Modification du fomat du titre de section subparagraph
\definecolor{light-gray}{gray}{0.9}
\newcommand{\code}[1]{\colorbox{light-gray}{\texttt{#1}}}
\DeclareMathAlphabet\mathsf{OT1}{lcmss}{m}{n}
答案1
您不能+
在以 `\verb+...+ 分隔的逐字文本中使用。作为分隔符,您必须使用未出现在逐字文本中的字符。
我认为"
这不太可能出现在正则表达式中,但是由于墨菲定律,它确实出现在最后一个中!(我用过T
。)
另外,您需要换行。我会制作三个大小相同的L
列(顺便说一句,您的定义需要一个未使用的参数,因此我将其删除)并使用fvextra
功能,请参阅代码。
当然,我还建议删除垂直规则,但请参见下面的更具吸引力的版本。
\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{fvextra}
\newcolumntype{L}{>{\RaggedRight}X} % new
\begin{document}
\begin{table}[!htp] % new
\linespread{0.84}
\footnotesize
\setlength\tabcolsep{4pt} % new
\setcellgapes{2pt} % new
\makegapedcells
\fvset{breaklines,breakanywhere,breakanywheresymbolpre={}}
\begin{tabularx}{\linewidth}{|L|L|L|} % new
\hline
\bfseries Pour trouver & \bfseries RegEx à utiliser & \bfseries Exemple \\
\hline
E-mail & \Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" & [email protected] \\
\hline
Numéros de sécurité sociale américains & \Verb"[^[a-z]+\$]" & 513-84-7329 \\
\hline
Adresses IPV4 & \Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" & 212.23.2.110\\
\hline
Dates au format MM/JJ/AAAA & \Verb"[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]" & Un seul mot non vide en minuscule \\
\hline
Numéros de cartes Mastercard & \Verb"[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]" & Exemple \\
\hline
Numéros de cartes Visa & \Verb"[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]" & Exemple \\
\hline
Numéros de cartes American Express & \Verb"[^3[47][0-9]{13}\$]" & Exemple \\
\hline
Codes ZIP US & \Verb"[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]" & Exemple \\
\hline
Chemins d’accès à des fichiers & \Verb"[\\[^\\]+\$]+\$]" & Exemple \\
\hline
URL & \Verb T[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]T & Exemple \\
\hline
\end{tabularx}
\caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}
\end{table}
\begin{table}[!htp] % new
\footnotesize\raggedright
\fvset{breaklines,breakanywhere,breakanywheresymbolpre={}}
\textbf{E-mail} \\
\Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" \\
\texttt{[email protected]}
\medskip
\textbf{Numéros de sécurité sociale américains} \\
\Verb"[^[a-z]+\$]" \\
513-84-7329
\medskip
\textbf{Adresses IPV4} \\
\Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" \\
212.23.2.110
\medskip
\textbf{Dates au format MM/JJ/AAAA} \\
\Verb"[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]" \\
Exemple
\medskip
\textbf{Numéros de cartes Mastercard} \\
\Verb"[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]" \\
Exemple
\medskip
\textbf{Numéros de cartes Visa} \\
\Verb"[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]" \\
Exemple
\medskip
\textbf{Numéros de cartes American Express} \\
\Verb"[^3[47][0-9]{13}\$]" \\
Exemple
\medskip
\textbf{Codes ZIP US} \\
\Verb"[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]" \\
Exemple
\medskip
\textbf{Chemins d’accès à des fichiers} \\
\Verb"[\\[^\\]+\$]+\$]" \\
Exemple
\medskip
\textbf{URL} \\
\Verb T[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]T \\
Exemple
\caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}
\end{table}
\end{document}
答案2
您的代码因两个不同的原因而失败。
用于标记逐字字符串的开始和结束的字符绝不能发生在字符串本身中。但是,您在
\verb
指令 --+
-- 中使用的分隔符出现在多个字符串中。\verb
不允许自动换行。在 -type 列\verb
内嵌入指令X
无法解决这个问题。
您的代码还有另外两个严重问题:首先,除非有人有权访问文件structure.cls
,否则您的代码根本无法编译。其次,由于您的tabularx
环境不允许在第 1 列和第 3 列自动换行,因此您的表格根本无法放入文本块中。
该怎么办?首先,我建议您加载xurl
包并\verb/.../
用指令替换所有指令\path{...}
;这将 (a) 以等宽字体呈现字符串,并且 (b) 允许在任意点换行。其次,也允许在第 1 列和第 3 列自动换行。第三,使用横向模式呈现表格。第四,是否可以删除指令\input{structure.cls}
?最后,请考虑通过删除所有垂直线和大多数水平线来使表格具有更开放的“外观”。
另外:该\path
宏就像宏一样,只是在包被加载的\url
情况下它不会将其参数转换为超链接。hyperref
\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm,
margin=2cm]{geometry} % set margins as appropriate
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{tabularx}
\usepackage{ragged2e}
\newcolumntype{L}{>{\RaggedRight}X}
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
\usepackage{pdflscape} % for 'landscape' env.
\usepackage{booktabs} % for well-spaced horizontal rules
\usepackage{xurl} % for '\path' macro, allow line breaks at arbitrary points
%\input{structure.cls} % % huh?
\begin{document}
\begin{landscape}
\begin{table}[!htbp]
\setlength\tabcolsep{4pt} % default: 6pt
% 24cm - 2*2cm = 20cm = available width in landscape mode
\begin{tabularx}{20cm}{@{} P{3.5cm} L P{3cm} @{}}
\toprule
\bfseries Pour trouver
& \bfseries RegEx à utiliser
& \bfseries Exemple \\
\midrule
E-mail
& \path{[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]}
& [email protected] \\
\addlinespace
Numéros de sécurité sociale américains
& \path{[^[a-z]+\$]}
& 513-84-7329 \\
\addlinespace
Adresses IPV4
& \path{[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]}
& 212.23.2.110\\
\addlinespace
Dates au format MM/JJ/AAAA
& \path{[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]}
& Un seul mot non vide en minuscule \\
\addlinespace
Numéros de cartes Mastercard
& \path{[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]}
& Exemple \\
\addlinespace
Numéros de cartes Visa
& \path{[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]}
& Exemple \\
\addlinespace
Numéros de cartes American Express
& \path{[^3[47][0-9]{13}\$]}
& Exemple \\
\addlinespace
Codes ZIP US
& \path{[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]}
& Exemple \\
\addlinespace
Chemins d’accès à des fichiers
& \path{[\\[^\\]+\$]+\$]}
& Exemple \\
\addlinespace
URL
& \path{[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]}
& Exemple \\
\bottomrule
\end{tabularx}
\caption{Exemples d'expressions régulières couramment utilisées}
\label{tab:regexCourammentUtilisees}
\end{table}
\end{landscape}
\end{document}
答案3
使用 OpTeX 时,表格中的逐字记录没有问题:
\fontfam[lm]
\thistable{\verbchar X \def\_printinverbatim #1{\foreach#1\do{##1\hskip0ptplus1pt\relax}}}
\table pxto\hsize {|p{4cm\fL}|p{\tsize}|p{3cm\fL}|}{\crl
\bf Pour trouver & \bf RegEx à utiliser & \bf Exemple \crl
E-mail & X[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]X & [email protected] \crl
Numéros de sécurité sociale américains & X[^[a-z]+\$]X & 513-84-7329 \crl
Adresses IPV4 & X[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]X & 212.23.2.110 \crl
Dates au format MM/JJ/AAAA & X[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]X & Un seul mot non vide en minuscule \crl
Numéros de cartes Mastercard & X[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]X & Exemple \crl
Numéros de cartes Visa & X[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]X & Exemple \crl
Numéros de cartes American Express & X[^3[47][0-9]{13}\$]X & Exemple \crl
Codes ZIP US & X[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]X & Exemple \crl
Chemins d’accès à des fichiers & X[\\[^\\]+\$]+\$]X & Exemple \crl
URL & X[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]X & Exemple \crl
}
\bye