Ich versuche, einige Eingabe mit Regex für eine gemischte lateinische/ideographische (Chinesisch/Japanse/Koreanisch) Volltextsuche zu sanieren/formatieren.Wie analysiert man eine lateinische/ideographische Volltextabfrage korrekt mit Regex?
Ich fand ein altes Beispiel von jemandes Versuch, eine lateinische/asiatische Sprachzeichenkette in einem Forum zu sanieren, von dem ich nicht wieder finden kann (volle Anerkennung dem ursprünglichen Autor dieses Codes).
Ich habe Probleme, den Regex-Teil der Funktion zu verstehen, insbesondere warum es scheint, die Zahlen 0, 2 und 3 anders zu behandeln als der Rest der lateinischen Zahlen 1,4-9 (im Grunde behandelt es die Zahlen 0,4-9 richtig, aber die Zahlen 0,2-3 in der Abfrage werden behandelt, als ob sie asiatische Zeichen sind).
Zum Beispiel. Ich versuche, die folgende Zeichenfolge zu sanieren:
"Hallo 1234567890 蓄積 し た abc123def"
und es wird sich in:
"hallo 1 456789 abc1 def 2 3 0 蓄 積 し た 2 3"
die korrekte Ausgabe für diesen sollte hygienisiert String sein:
„Hallo 1234567890 蓄 積 し た abc123def“
Wie Sie es richtig Leerzeichen aus den asiatischen Zeichen sehen, aber die Zahlen 0, 2, 3 sind anders als alle anderen behandelt Nummer. Jede Hilfe, warum die Regex die Zahlen 0,2 und 3 anders behandelt, wäre eine große Hilfe (oder wenn Sie einen besseren Weg kennen, um ein ähnliches Ergebnis zu erzielen)! Danke
Ich habe unten
function prepareString($str) { $str = mb_strtolower(trim(preg_replace('#[^\p{L}\p{Nd}\.]+#u', ' ', $str))); return trim(preg_replace('#\s\s+#u', ' ', preg_replace('#([^\12544-\65519])#u', ' ', $str) . ' ' . implode(' ', preg_split('#([\12544-\65519\s])?#u', $str, -1, PREG_SPLIT_NO_EMPTY)))); }
UPDATE die Funktion enthalten: Rahmen für Klarheit Providing
ich eine Website bin Authoring in China ins Leben gerufen wird. Diese Website wird eine Suchfunktion haben und ich versuche einen Parser für die Suchanfrage zu schreiben.
Im Gegensatz zur englischen Sprache, die ein "" als Trennzeichen zwischen Wörtern in einem Satz verwendet, verwendet Chinesisch keine Leerzeichen zwischen Wörtern. Aus diesem Grund muss ich eine Suchabfrage neu formatieren, indem ich jedes chinesische Zeichen zerlege und jedes Zeichen einzeln in der Datenbank suche. Chinesische Benutzer verwenden auch lateinische/englische Zeichen für Dinge wie Markennamen, die sie zusammen mit ihren chinesischen Schriftzeichen mischen können (z. B. Ivy 牛仔 舖).
Was ich tun möchte, ist alle englischen Wörter aus den chinesischen Schriftzeichen zu trennen, und jedes chinesische Schriftzeichen mit einem Leerzeichen zu trennen.
Eine Suchanfrage könnte wie folgt aussehen: Ivy 牛仔 舖
Und ich würde es analysieren will, so dass es wie folgt aussieht: Ivy 牛 仔 舖
Dank Alan, ich habe versucht, \ x {nnn} wie Sie vorgeschlagen, aber ich kann nicht scheinen, Dokumentation zu finden, wie eine ganze Reihe von hexadezimalen Notation übereinstimmen. Ich kann ein einzelnes Zeichen abgleichen, aber um einen ganzen Bereich zu blockieren, kann ich nicht die Lösung finden. Irgendwelche Vorschläge? Ich habe auch versucht, die p {Latin} Notation zu verwenden, aber es gibt mir Ärger, weil es mir ähnliche Probleme gibt. zB: "hallo 1234567890 蓄積 し た abc123def" wird aufgeteilt in: "hell 1234567890 ab 23def" bei der Verwendung von preg_replace ('# \ P {Nd} \ P {Latein} #u', '', $ str) – justinl
Ich bin immer noch nicht klar, was Sie zu tun versuchen. Können Sie uns die richtige Ausgabe für Ihren Testfall zeigen? Bitte bearbeiten Sie Ihre Frage und legen Sie sie dort, nicht in einem Kommentar. –
Vielen Dank Alan, ich habe meine Frage aktualisiert und werde weitere Hinzufügungen/Fragen innerhalb des Hauptteils der Frage anstelle dieses Kommentarfeldes zur Verfügung stellen. – justinl