Je veux construire une simple regex qui couvre les cordes citées, y compris des citations évasées en eux. Par exemple, évidemment, quelque chose comme p> ne fonctionne pas, car il correspond à la première citation échappée. P > Quelle est la version correcte? P> Je suppose que la réponse serait la même pour les autres caractères échappés (en remplaçant simplement le caractère respectif). P> Au fait, je Je suis conscient de la regex "attrape-tout" p> mais j'essaie de l'éviter dans la mesure du possible, car, sans surprise, il fonctionne un peu plus lent qu'un plus spécifique. < / p> p>
6 Réponses :
Essayez celui-ci ... il préfère le \ " code>, si cela correspond, il le choisira, sinon il choisira
" code>.
"((?:\\"|[^"])*)"
Cela ne fonctionne pas. Quand j'essaie sur la chaîne "lorem \" ipsum \ "TRITANI Impédit Impedit CIVIBUS EI PRI CODE>, Regexbuddy me dit qu'il faut 215 étapes pour (incorrectement) correspondant
" lorem \ "ipsum \" < / code>. Comparez cela à la solution @ Arcain, qui ne prend que 15 étapes (correctement) signaler une tentative de correspondance infructueuse.
@Alan, c'est vraiment intéressant que la mine correspond à des données sans soulise. Je suis content que vous ayez partagé cela avec moi - c'est comme obtenir un (bon) critique de code sur mes regexes. Parfois, je vais devoir investir dans cet outil Regexbuddy.
Oui, c'est très pratique, mais si vous n'avez pas investi dans MRE , faites-le en premier.
En fait, le motif que j'ai fourni a évolué d'un en maîtrisant des expressions régulières. Je pense que je l'utilise (le modèle) depuis près de dix ans maintenant.
Voici celui que j'ai utilisé dans le passé:
"(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")"
Votre regex ne fonctionnera pas sur \ "ceci est \" non censé être \ "valide" code>
@Maksymiuk Oui, tu es correct. Je m'attends à ce que la chaîne commence par une citation et je ne vérifie pas si ce premier citation est échappé. Si c'est quelque chose que vous devez faire, le motif peut être ajusté pour tenir compte de cela en utilisant un look négatif à l'envers: ((?
Le problème avec toutes les autres réponses est qu'elles ne correspondent que pour les tests évidents initiaux, mais tombent rapidement à l'examen approfondi. Par exemple, toutes les réponses s'attendent à ce que la toute première citation ne soit pas échappée. Mais surtout, l'échappement est un processus plus complexe que celui d'une seule barre oblique inverse, car cette barre oblique inverse peut être échappée. Imaginez essayer de faire correspondre une chaîne qui se termine par une barre oblique inverse. Comment cela serait-il possible?
Ce serait le modèle que vous recherchez. Il ne suppose pas que la première citation est le fonctionnement, et elle permettra de s'échapper. P>
LookeDeHind Négatif n'est pas pris en charge dans JavaScript (pourtant: v8project.blogspot.com / 2016/02 / ... ).
Veuillez trouver dans le code ci-dessous, comprenant l'évaluation d'expression pour String B>, Number B> et Decimal B>. public static void commaSeparatedStrings() {
String value = "'It\\'s my world', 'Hello World', 'What\\'s up', 'It\\'s just what I expected.'";
if (value.matches("'([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.]+'(((,)|(,\\s))'([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.]+')*")) {
System.out.println("Valid...");
} else {
System.out.println("Invalid...");
}
}
/**
*
*/
public static void commaSeparatedDecimals() {
String value = "-111.00, 22111.00, -1.00";
// "\\d+([,]|[,\\s]\\d+)*"
if (value.matches(
"^([-]?)\\d+\\.\\d{1,10}?(((,)|(,\\s))([-]?)\\d+\\.\\d{1,10}?)*")) {
System.out.println("Valid...");
} else {
System.out.println("Invalid...");
}
}
/**
*
*/
public static void commaSeparatedNumbers() {
String value = "-11, 22, -31";
if (value.matches("^([-]?)\\d+(((,)|(,\\s))([-]?)\\d+)*")) {
System.out.println("Valid...");
} else {
System.out.println("Invalid...");
}
}
Ce capturera toutes les cordes (dans les guillemets doubles), y compris \ "et \\ Séquences d'échappement. (Notez que cette réponse suppose que le seulement em> Les séquences d'échappement dans votre chaîne sont des séquences \ "ou \\ - Aucun autre caractères de barre oblique inverse ou séquences d'échappement ne sera capturée.) P> (\\ # get the preceding slash (for each section)
(?:b|t|n|f|r|\"|\\) # capture common sequences like \n and \t
|\\ # OR (get the preceding slash and)...
# capture variable-width octal escape sequences like \02, \13, or \377
(?:(?:[0-2][0-9]{1,2}|3[0-6][0-9]|37[0-7]|[0-9]{1,2}))
|\\ # OR (get the preceding slash and)...
(?:u(?:[0-9a-fA-F]{4})) # capture fixed-width Unicode sequences like \u0242 or \uFFAD
)
Cela fonctionne pour moi et c'est plus simple que la réponse actuelle réégyvaleur actuel fonctionne correctement pour suivre les chaînes: p> < p> ou ou (? - avant code> " code> ne doit pas être
\ code>, et cette expression est laissée et droite. p>
(\\ "| [^"]) * code> - que dans les citations intérieures: Peut-être être échappé citations
\\ " code> ou quoi que ce soit pour, sauf guillemets
[^"] code> p>
234 code> -
false code> ou
null code> p>
"234" code> -
vrai code> ou
["234"] code> p>
"" code> -
true code> ou
[""] code> p>
"234 + 321 \\" 24 \\ "" code> -
true code> ou
["234 + 321 \\ "24 \\" "] code> p>
" 234 + 321 \\ "24 \\" "+ 123 +" \\ "test (\\" 235 \\ ") \\ "" code> -
true code> p>
["234 + 321 \\" 24 \\ "", test "\\" "235 \\") \\ ""] code> p>
"234 + 321 \\" 24 \\ "" + 123 + "\\" test (\\ "235 \\ ") \\" \\ " code> -
true code> p>
[" 234 + 321 \\ "24 \\" "] Code> p> p>
duplicatal possible de Comment puis-je correspondre au double -Les cordes recherchées avec des caractères à double citation échappé?