@SocialCensus, przykład dałeś w komentarzu do MarkusQ, gdzie można rzucać w ' obok ", nie działa z przykładem MarkusQ nadanym tuż powyżej, jeśli zmienimy sam na sam's: (test," przecinek ", bob,", sam ", tutaj) nie ma odpowiednika (,) (? = (?: [^ "'] | [" |'] [^ "'] ") $.) W rzeczywistości problem i "Nie interesuje mnie ani jedno, ani podwójne cytaty", jest niejednoznaczne. Musisz być jasne, co masz na myśli, cytując albo z "albo z." Na przykład, czy zagnieżdżanie jest dozwolone czy nie? Jeśli tak, to ile poziomów? Jeśli tylko 1 zagnieżdżony poziom, co dzieje się z przecinkiem poza wewnętrzną zagnieżdżoną ofertą ale w zewnętrznym cudzysłowie? Powinieneś również wziąć pod uwagę, że pojedyncze cytaty występują same w sobie jako apostrofy (tj. tak jak w kontrprzykładzie, który dałem wcześniej z samem).Na koniec, wyrecytowane wyrażenie nie traktuje pojedynczych cudzysłowów na równi z podwójnymi cudzysłowami, ponieważ zakłada, że ostatni typ cudzysłowu jest koniecznie podwójnym cudzysłowem - i zastąpienie ostatniego podwójnego cudzysłowu przez ["|"] również ma problem jeśli tekst nie pochodzi z poprawnym cytowaniem (lub jeśli używane są apostrofy), prawdopodobnie prawdopodobnie moglibyśmy założyć, że wszystkie cytaty są poprawnie zdefiniowane.
Wyrażenie regularne MarkusQ odpowiada na pytanie: znajdź wszystkie przecinki o parzystym numerze podwójnych cudzysłowów (poza podwójnymi cudzysłowami) i pomijaj wszystkie przecinki, które mają nieparzystą liczbę podwójnych cudzysłowów (tzn. są w cudzysłowach) .To jest na ogół to samo rozwiązanie, co prawdopodobnie chcesz, ale Spójrz na kilka anomalii: po pierwsze, jeśli ktoś na końcu odejdzie od cudzysłowu, to wyrażenie regularne znajdzie wszystkie błędne przecinki, zamiast znajdować pożądane lub nie pasuje do żadnego. Oczywiście, jeśli brakuje podwójnego cudzysłowu, wszystkie zakłady są wyłączone, ponieważ może nie być jasne, czy brakujący element należy na końcu, czy też należy na początku; jednak jest przypadek, który jest uzasadniony i gdzie regex mógłby zawodzić (jest to druga "anomalia"). Jeśli dostosujesz wyrażenie regularne, aby przejść przez linie tekstu, powinieneś wiedzieć, że cytowanie wielu kolejnych akapitów wymaga umieszczenia pojedynczego podwójnego cudzysłowu na początku każdego akapitu i pomijając cytat na końcu każdego akapitu, z wyjątkiem koniec ostatniego akapitu. Oznacza to, że w przestrzeni tych akapitów regex zawiedzie w niektórych miejscach i odniesie sukces w innych.
Przykłady i krótkie dyskusje na temat cytowania akapitów i zagnieżdżonych cytowań można znaleźć tutaj http://en.wikipedia.org/wiki/Quotation_mark.
Oficjalna ostateczna odpowiedź, podana przez MarkusQ: (,) (? = (?: [^ "'] | [" |'] [^ "'] *") * $) – SocialCensus
Na marginesie to nie działa w przypadku przerw w linii środkowej. – SocialCensus
@SocialCensus zobacz moją notatkę dołączoną do odpowiedzi. – MarkusQ