Erwägen:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Angenommen, ich habe den obigen Code. Wie schreibe ich die Anweisung richtig if ($a contains 'are')
?
Erwägen:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Angenommen, ich habe den obigen Code. Wie schreibe ich die Anweisung richtig if ($a contains 'are')
?
Antworten:
Sie können die strpos()
Funktion verwenden, mit der das Auftreten einer Zeichenfolge in einer anderen gefunden wird:
$a = 'How are you?';
if (strpos($a, 'are') !== false) {
echo 'true';
}
Beachten Sie, dass die Verwendung von !== false
absichtlich ist (weder != false
noch === true
das gewünschte Ergebnis zurückgibt); strpos()
Gibt entweder den Versatz zurück, an dem die Nadelschnur in der Heuhaufenschnur beginnt, oder den Booleschen Wert, false
wenn die Nadel nicht gefunden wird. Da 0 ein gültiger Offset und 0 "falsey" ist, können wir keine einfacheren Konstrukte wie verwenden !strpos($a, 'are')
.
strpos($a, 'are') > -1
, um auf wahr zu testen. Aus Debugging-Sicht verschwendet mein Gehirn weniger Taktzyklen, um festzustellen, ob die Zeile korrekt geschrieben ist, wenn ich keine zusammenhängenden Gleichheitszeichen zählen muss.
Sie können reguläre Ausdrücke verwenden strpos
. Dies ist besser für die Wortübereinstimmung als von anderen Benutzern erwähnt. Es wird auch für Zeichenfolgen wie Tarif, Pflege, Blick usw. als wahr zurückgegeben. Dies kann bei regulären Ausdrücken einfach vermieden werden, indem Wortgrenzen verwendet werden.
Ein einfaches Match für are könnte ungefähr so aussehen:
$a = 'How are you?';
if (preg_match('/\bare\b/', $a)) {
echo 'true';
}
Auf der Leistungsseite strpos
ist es ungefähr dreimal schneller und wenn ich eine Million Vergleiche auf einmal anstellte, dauerte es preg_match
1,5 Sekunden, bis es fertig war, und strpos
es dauerte 0,5 Sekunden.
Bearbeiten: Um einen beliebigen Teil der Zeichenfolge zu durchsuchen, nicht nur Wort für Wort, würde ich die Verwendung eines regulären Ausdrucks wie empfehlen
$a = 'How are you?';
$search = 'are y';
if(preg_match("/{$search}/i", $a)) {
echo 'true';
}
Der i
reguläre Ausdruck am Ende des regulären Ausdrucks ändert die Groß- und Kleinschreibung nicht. Wenn Sie dies nicht möchten, können Sie ihn weglassen.
Dies kann in einigen Fällen recht problematisch sein, da die $ -Suchzeichenfolge in keiner Weise bereinigt ist. Ich meine, in einigen Fällen $search
besteht sie die Prüfung möglicherweise nicht, als ob es sich um eine Benutzereingabe handelt, mit der sie eine Zeichenfolge hinzufügen können, die sich möglicherweise so verhält ein anderer regulärer Ausdruck ...
Hier ist auch ein großartiges Tool zum Testen und Anzeigen von Erklärungen für verschiedene reguläre Ausdrücke Regex101
Um beide Funktionssätze in einer einzigen Mehrzweckfunktion zu kombinieren (auch mit wählbarer Groß- / Kleinschreibung), können Sie Folgendes verwenden:
function FindString($needle,$haystack,$i,$word)
{ // $i should be "" or "i" for case insensitive
if (strtoupper($word)=="W")
{ // if $word is "W" then word search instead of string in string search.
if (preg_match("/\b{$needle}\b/{$i}", $haystack))
{
return true;
}
}
else
{
if(preg_match("/{$needle}/{$i}", $haystack))
{
return true;
}
}
return false;
// Put quotes around true and false above to return them as strings instead of as bools/ints.
}
Hier ist eine kleine Utility-Funktion, die in solchen Situationen nützlich ist
// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
return strpos($haystack, $needle) !== false;
}
if ($email->contains("@") && $email->endsWith(".com)) { ...
oderif (strpos($email, "@") !== false && substr($email, -strlen(".com")) == ".com") { ...
Während die meisten dieser Antworten Ihnen sagen, ob ein Teilstring in Ihrer Zeichenfolge erscheint, ist dies normalerweise nicht das, was Sie wollen, wenn Sie nach einem bestimmten Wort suchen , und nicht nach einem Teilstring .
Was ist der Unterschied? Teilzeichenfolgen können mit anderen Worten erscheinen:
Eine Möglichkeit, dies zu mildern, wäre die Verwendung eines regulären Ausdrucks in Verbindung mit Wortgrenzen ( \b
):
function containsWord($str, $word)
{
return !!preg_match('#\\b' . preg_quote($word, '#') . '\\b#i', $str);
}
Diese Methode hat nicht die gleichen Fehlalarme wie oben angegeben, aber einige eigene Randfälle. Wortgrenzen passen auf Nicht-Wort - Zeichen ( \W
), die alles sein wird , die nicht ist a-z
, A-Z
, 0-9
, oder _
. Das bedeutet, dass Ziffern und Unterstriche als Wortzeichen gezählt werden und solche Szenarien fehlschlagen:
Wenn Sie etwas genaueres als dies wünschen, müssen Sie mit dem Parsen der englischen Syntax beginnen, und das ist eine ziemlich große Dose Würmer (und setzt sowieso die richtige Verwendung der Syntax voraus, was nicht immer selbstverständlich ist).
\b
zwei Dinge übereinstimmen, \W
die nicht übereinstimmen , was es großartig macht, Wörter in einer Zeichenfolge zu finden: Es stimmt mit dem Anfang von Zeichenfolge ( ^
) und dem Ende von Zeichenfolge ( $
)
Um festzustellen, ob eine Zeichenfolge eine andere Zeichenfolge enthält, können Sie die PHP-Funktion strpos () verwenden .
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
<?php
$haystack = 'how are you';
$needle = 'are';
if (strpos($haystack,$needle) !== false) {
echo "$haystack contains $needle";
}
?>
VORSICHT:
Befindet sich die gesuchte Nadel am Anfang des Heuhaufens, wird Position 0 zurückgegeben. Wenn Sie einen ==
Vergleich durchführen, der nicht funktioniert, müssen Sie eine durchführen===
Ein ==
Vorzeichen ist ein Vergleich und prüft, ob die Variable / Ausdruck / Konstante links den gleichen Wert hat wie die Variable / Ausdruck / Konstante rechts.
Ein ===
Vorzeichen ist ein Vergleich, um festzustellen, ob zwei Variablen / Ausdrücke / Konstanten gleich AND
sind und denselben Typ haben - dh beide sind Zeichenfolgen oder beide sind Ganzzahlen.
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Note our use of ===. Simply, == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'.";
}
else {
echo "The string '$findme' was found in the string '$mystring',";
echo " and exists at position $pos.";
}
?>
Eine andere Option wäre die Verwendung strstr()
oder stristr()
wenn Ihre Suche die Groß- und Kleinschreibung nicht berücksichtigen sollte.
strstr($a, 'are')
ist viel eleganter als das Hässliche strpos($a, 'are') !== false
. PHP braucht wirklich eine str_contains()
Funktion.
Verwenden Sie die Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung mit stripos()
:
if (stripos($string,$stringToSearch) !== false) {
echo 'true';
}
Peer to SamGoody und Lego Stormtroopr Kommentare.
Wenn Sie nach einem PHP-Algorithmus suchen, mit dem Suchergebnisse basierend auf der Nähe / Relevanz mehrerer Wörter eingestuft werden können, bietet sich eine schnelle und einfache Möglichkeit, Suchergebnisse nur mit PHP zu generieren:
Probleme mit den anderen boolean Suchmethoden wie strpos()
, preg_match()
, strstr()
oderstristr()
PHP-Methode basierend auf Vector Space Model und tf-idf (Begriff Frequenz-inverse Dokumentfrequenz):
Es klingt schwierig, ist aber überraschend einfach.
Wenn wir nach mehreren Wörtern in einer Zeichenfolge suchen möchten, besteht das Hauptproblem darin, wie wir jedem von ihnen eine Gewichtung zuweisen.
Wenn wir die Begriffe in einer Zeichenfolge danach gewichten könnten, wie repräsentativ sie für die gesamte Zeichenfolge sind, könnten wir unsere Ergebnisse nach denjenigen sortieren, die am besten zur Abfrage passen.
Dies ist die Idee des Vektorraummodells, nicht weit von der Funktionsweise der SQL-Volltextsuche entfernt:
function get_corpus_index($corpus = array(), $separator=' ') {
$dictionary = array();
$doc_count = array();
foreach($corpus as $doc_id => $doc) {
$terms = explode($separator, $doc);
$doc_count[$doc_id] = count($terms);
// tf–idf, short for term frequency–inverse document frequency,
// according to wikipedia is a numerical statistic that is intended to reflect
// how important a word is to a document in a corpus
foreach($terms as $term) {
if(!isset($dictionary[$term])) {
$dictionary[$term] = array('document_frequency' => 0, 'postings' => array());
}
if(!isset($dictionary[$term]['postings'][$doc_id])) {
$dictionary[$term]['document_frequency']++;
$dictionary[$term]['postings'][$doc_id] = array('term_frequency' => 0);
}
$dictionary[$term]['postings'][$doc_id]['term_frequency']++;
}
//from http://phpir.com/simple-search-the-vector-space-model/
}
return array('doc_count' => $doc_count, 'dictionary' => $dictionary);
}
function get_similar_documents($query='', $corpus=array(), $separator=' '){
$similar_documents=array();
if($query!=''&&!empty($corpus)){
$words=explode($separator,$query);
$corpus=get_corpus_index($corpus, $separator);
$doc_count=count($corpus['doc_count']);
foreach($words as $word) {
if(isset($corpus['dictionary'][$word])){
$entry = $corpus['dictionary'][$word];
foreach($entry['postings'] as $doc_id => $posting) {
//get term frequency–inverse document frequency
$score=$posting['term_frequency'] * log($doc_count + 1 / $entry['document_frequency'] + 1, 2);
if(isset($similar_documents[$doc_id])){
$similar_documents[$doc_id]+=$score;
}
else{
$similar_documents[$doc_id]=$score;
}
}
}
}
// length normalise
foreach($similar_documents as $doc_id => $score) {
$similar_documents[$doc_id] = $score/$corpus['doc_count'][$doc_id];
}
// sort from high to low
arsort($similar_documents);
}
return $similar_documents;
}
FALL 1
$query = 'are';
$corpus = array(
1 => 'How are you?',
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
ERGEBNIS
Array
(
[1] => 0.52832083357372
)
FALL 2
$query = 'are';
$corpus = array(
1 => 'how are you today?',
2 => 'how do you do',
3 => 'here you are! how are you? Are we done yet?'
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
ERGEBNISSE
Array
(
[1] => 0.54248125036058
[3] => 0.21699250014423
)
FALL 3
$query = 'we are done';
$corpus = array(
1 => 'how are you today?',
2 => 'how do you do',
3 => 'here you are! how are you? Are we done yet?'
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
ERGEBNISSE
Array
(
[3] => 0.6813781191217
[1] => 0.54248125036058
)
Es gibt viele Verbesserungen vorgenommen werden , aber das Modell bietet eine Möglichkeit , gute Ergebnisse aus natürlichen Abfragen zu bekommen, die Booleschen Operatoren haben nicht wie strpos()
, preg_match()
, strstr()
oder stristr()
.
NOTA BENE
Optionales Entfernen der Redundanz vor dem Suchen der Wörter
Dadurch wird die Indexgröße reduziert und der Speicherbedarf verringert
weniger Festplatten-E / A.
schnellere Indizierung und damit schnellere Suche.
1. Normalisierung
2. Stoppwortbeseitigung
3. Wörterbuchersetzung
Ersetzen Sie Wörter durch andere, die eine identische oder ähnliche Bedeutung haben. (Beispiel: Ersetzen Sie Fälle von "hungrig" und "hungrig" durch "Hunger".)
Weitere algorithmische Maßnahmen (Schneeball) können durchgeführt werden, um Wörter weiter auf ihre wesentliche Bedeutung zu reduzieren.
Das Ersetzen von Farbnamen durch ihre hexadezimalen Äquivalente
Die Reduzierung numerischer Werte durch Reduzierung der Genauigkeit ist eine weitere Möglichkeit, den Text zu normalisieren.
RESSOURCEN
Wenn Sie das Problem "Falsey" und "Truthy" vermeiden möchten, können Sie substr_count verwenden:
if (substr_count($a, 'are') > 0) {
echo "at least one 'are' is present!";
}
Es ist etwas langsamer als strpos, aber es vermeidet die Vergleichsprobleme.
false
für "Bist du sicher?" da die Position für strpos
ist0
Eine andere Möglichkeit ist die Verwendung der Funktion strstr () . Etwas wie:
if (strlen(strstr($haystack,$needle))>0) {
// Needle Found
}
Hinweis: Bei der Funktion strstr () wird zwischen Groß- und Kleinschreibung unterschieden. Verwenden Sie für eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung die Funktion stristr () .
Ich bin ein wenig beeindruckt , dass keine der Antworten hier , dass verwendet strpos
, strstr
und ähnliche Funktionen erwähnt Multibyte String - Funktionen noch (2015.05.08).
Wenn Sie Probleme haben, Wörter mit bestimmten Sprachen zu finden , z. B. Deutsch, Französisch, Portugiesisch, Spanisch usw. (z. B. ä , é , ô , ç , º , ñ ), sollten Sie vorangestellt werden die Funktionen mit mb_
. Daher würde die akzeptierte Antwort stattdessen mb_strpos
oder mb_stripos
(für Matching ohne Berücksichtigung der Groß- und Kleinschreibung) verwenden:
if (mb_strpos($a,'are') !== false) {
echo 'true';
}
Wenn Sie nicht garantieren können, dass alle Ihre Daten zu 100% in UTF-8 enthalten sind , können Sie die mb_
Funktionen verwenden.
Ein guter Artikel, um zu verstehen, warum das absolute Minimum ist. Jeder Softwareentwickler muss unbedingt über Unicode und Zeichensätze (keine Ausreden!) Von Joel Spolsky Bescheid wissen .
In PHP können Sie am besten überprüfen, ob eine Zeichenfolge eine bestimmte Teilzeichenfolge enthält, indem Sie eine einfache Hilfsfunktion wie die folgende verwenden:
function contains($haystack, $needle, $caseSensitive = false) {
return $caseSensitive ?
(strpos($haystack, $needle) === FALSE ? FALSE : TRUE):
(stripos($haystack, $needle) === FALSE ? FALSE : TRUE);
}
strpos
findet die Position des ersten Auftretens eines Teilstrings mit Groß- und Kleinschreibung in einer Zeichenfolge.stripos
findet die Position des ersten Auftretens eines Teilstrings ohne Berücksichtigung der Groß- und Kleinschreibung in einer Zeichenfolge.myFunction($haystack, $needle) === FALSE ? FALSE : TRUE
stellt sicher, dass myFunction
immer ein Boolescher Wert zurückgegeben wird, und behebt unerwartetes Verhalten, wenn der Index der Teilzeichenfolge 0 ist.$caseSensitive ? A : B
wählt entweder strpos
oder aus stripos
, um die Arbeit zu erledigen, abhängig vom Wert von $caseSensitive
.var_dump(contains('bare','are')); // Outputs: bool(true)
var_dump(contains('stare', 'are')); // Outputs: bool(true)
var_dump(contains('stare', 'Are')); // Outputs: bool(true)
var_dump(contains('stare', 'Are', true)); // Outputs: bool(false)
var_dump(contains('hair', 'are')); // Outputs: bool(false)
var_dump(contains('aren\'t', 'are')); // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are')); // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are', true)); // Outputs: bool(false)
var_dump(contains('aren\'t', 'Are')); // Outputs: bool(true)
var_dump(contains('aren\'t', 'Are', true)); // Outputs: bool(false)
var_dump(contains('broad', 'are')); // Outputs: bool(false)
var_dump(contains('border', 'are')); // Outputs: bool(false)
Die folgende Funktion funktioniert ebenfalls und hängt von keiner anderen Funktion ab. Es wird nur die native Manipulation von PHP-Strings verwendet. Persönlich empfehle ich dies nicht, aber Sie können sehen, wie es funktioniert:
<?php
if (!function_exists('is_str_contain')) {
function is_str_contain($string, $keyword)
{
if (empty($string) || empty($keyword)) return false;
$keyword_first_char = $keyword[0];
$keyword_length = strlen($keyword);
$string_length = strlen($string);
// case 1
if ($string_length < $keyword_length) return false;
// case 2
if ($string_length == $keyword_length) {
if ($string == $keyword) return true;
else return false;
}
// case 3
if ($keyword_length == 1) {
for ($i = 0; $i < $string_length; $i++) {
// Check if keyword's first char == string's first char
if ($keyword_first_char == $string[$i]) {
return true;
}
}
}
// case 4
if ($keyword_length > 1) {
for ($i = 0; $i < $string_length; $i++) {
/*
the remaining part of the string is equal or greater than the keyword
*/
if (($string_length + 1 - $i) >= $keyword_length) {
// Check if keyword's first char == string's first char
if ($keyword_first_char == $string[$i]) {
$match = 1;
for ($j = 1; $j < $keyword_length; $j++) {
if (($i + $j < $string_length) && $keyword[$j] == $string[$i + $j]) {
$match++;
}
else {
return false;
}
}
if ($match == $keyword_length) {
return true;
}
// end if first match found
}
// end if remaining part
}
else {
return false;
}
// end for loop
}
// end case4
}
return false;
}
}
Prüfung:
var_dump(is_str_contain("test", "t")); //true
var_dump(is_str_contain("test", "")); //false
var_dump(is_str_contain("test", "test")); //true
var_dump(is_str_contain("test", "testa")); //flase
var_dump(is_str_contain("a----z", "a")); //true
var_dump(is_str_contain("a----z", "z")); //true
var_dump(is_str_contain("mystringss", "strings")); //true
Sie können die strstr
Funktion verwenden:
$haystack = "I know programming";
$needle = "know";
$flag = strstr($haystack, $needle);
if ($flag){
echo "true";
}
Ohne Verwendung einer eingebauten Funktion:
$haystack = "hello world";
$needle = "llo";
$i = $j = 0;
while (isset($needle[$i])) {
while (isset($haystack[$j]) && ($needle[$i] != $haystack[$j])) {
$j++;
$i = 0;
}
if (!isset($haystack[$j])) {
break;
}
$i++;
$j++;
}
if (!isset($needle[$i])) {
echo "YES";
}
else{
echo "NO ";
}
Ich hatte einige Probleme damit und entschied mich schließlich, meine eigene Lösung zu erstellen. Ohne Verwendung der Engine für reguläre Ausdrücke :
function contains($text, $word)
{
$found = false;
$spaceArray = explode(' ', $text);
$nonBreakingSpaceArray = explode(chr(160), $text);
if (in_array($word, $spaceArray) ||
in_array($word, $nonBreakingSpaceArray)
) {
$found = true;
}
return $found;
}
Möglicherweise stellen Sie fest, dass die vorherigen Lösungen keine Antwort auf das Wort sind, das als Präfix für ein anderes verwendet wird. Um Ihr Beispiel zu verwenden:
$a = 'How are you?';
$b = "a skirt that flares from the waist";
$c = "are";
Mit den obigen Beispielen beide $a
und $b
enthält $c
, aber Sie möchten möglicherweise, dass Ihre Funktion Ihnen sagt, dass nur $a
enthält $c
.
$found = false
am Anfang
Eine andere Möglichkeit, das Auftreten eines Wortes aus einer Zeichenfolge mithilfe von strstr () und stristr () zu ermitteln, ist die folgende:
<?php
$a = 'How are you?';
if (strstr($a,'are')) // Case sensitive
echo 'true';
if (stristr($a,'are')) // Case insensitive
echo 'true';
?>
i
in stristr
steht für unempfindlich.
Viele Antworten, die substr_count
prüfen, ob das Ergebnis ist >0
. Da die if
Anweisung jedoch Null als falsch betrachtet , können Sie diese Prüfung vermeiden und direkt schreiben:
if (substr_count($a, 'are')) {
Um zu überprüfen, ob nicht vorhanden, fügen Sie den !
Operator hinzu:
if (!substr_count($a, 'are')) {
Dies kann auf drei verschiedene Arten erfolgen:
$a = 'How are you?';
1- stristr ()
if (strlen(stristr($a,"are"))>0) {
echo "true"; // are Found
}
2-strpos ()
if (strpos($a, "are") !== false) {
echo "true"; // are Found
}
3- preg_match ()
if( preg_match("are",$a) === 1) {
echo "true"; // are Found
}
Die Kurzversion
$result = false!==strpos($a, 'are');
Um ein "Wort" zu finden, anstatt das Auftreten einer Reihe von Buchstaben, die tatsächlich Teil eines anderen Wortes sein könnten, wäre das Folgende eine gute Lösung.
$string = 'How are you?';
$array = explode(" ", $string);
if (in_array('are', $array) ) {
echo 'Found the word';
}
$string
istAre are, are?
Sie sollten das Format ohne Berücksichtigung der Groß- und Kleinschreibung verwenden. Wenn der eingegebene Wert also in ist small
oder caps
keine Rolle spielt.
<?php
$grass = "This is pratik joshi";
$needle = "pratik";
if (stripos($grass,$needle) !== false) {
/*If i EXCLUDE : !== false then if string is found at 0th location,
still it will say STRING NOT FOUND as it will return '0' and it
will goto else and will say NOT Found though it is found at 0th location.*/
echo 'Contains word';
}else{
echo "does NOT contain word";
}
?>
Hier findet Stripos Nadel im Heystack ohne Rücksicht auf Fall (Small / Caps).
Vielleicht könnten Sie so etwas gebrauchen:
<?php
findWord('Test all OK');
function findWord($text) {
if (strstr($text, 'ok')) {
echo 'Found a word';
}
else
{
echo 'Did not find a word';
}
}
?>
Nicht verwenden, preg_match()
wenn Sie nur überprüfen möchten, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist. Verwenden Sie strpos()
oder strstr()
stattdessen, da sie schneller sind. ( http://in2.php.net/preg_match )
if (strpos($text, 'string_name') !== false){
echo 'get the string';
}
Wenn Sie überprüfen möchten, ob die Zeichenfolge mehrere spezifische Wörter enthält, können Sie Folgendes tun:
$badWords = array("dette", "capitale", "rembourser", "ivoire", "mandat");
$string = "a string with the word ivoire";
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $string, $matches);
if ($matchFound) {
echo "a bad word has been found";
}
else {
echo "your string is okay";
}
Dies ist nützlich, um Spam beispielsweise beim Senden von E-Mails zu vermeiden.
Die strpos-Funktion funktioniert einwandfrei. Wenn Sie jedoch case-insensitive
in einem Absatz nach einem Wort suchen möchten, können Sie die stripos
Funktion von verwenden PHP
.
Zum Beispiel,
$result = stripos("I love PHP, I love PHP too!", "php");
if ($result === false) {
// Word does not exist
}
else {
// Word exists
}
Suchen Sie die Position des ersten Auftretens eines Teilstrings ohne Berücksichtigung der Groß- und Kleinschreibung in einer Zeichenfolge.
Wenn das Wort in der Zeichenfolge nicht vorhanden ist, wird false zurückgegeben, andernfalls wird die Position des Wortes zurückgegeben.
Sie müssen identische / nicht identische Operatoren verwenden, da strpos 0 als Indexwert zurückgeben kann. Wenn Sie ternäre Operatoren mögen, sollten Sie Folgendes in Betracht ziehen (scheint ein wenig rückwärts zu sein, gebe ich zu):
echo FALSE === strpos($a,'are') ? 'false': 'true';
Überprüfen Sie, ob die Zeichenfolge bestimmte Wörter enthält.
Dies bedeutet, dass die Zeichenfolge in Wörter aufgelöst werden muss (siehe Hinweis unten).
Eine Möglichkeit, dies zu tun und die Trennzeichen anzugeben, ist die Verwendung von preg_split
( doc ):
<?php
function contains_word($str, $word) {
// split string into words
// separators are substrings of at least one non-word character
$arr = preg_split('/\W+/', $str, NULL, PREG_SPLIT_NO_EMPTY);
// now the words can be examined each
foreach ($arr as $value) {
if ($value === $word) {
return true;
}
}
return false;
}
function test($str, $word) {
if (contains_word($str, $word)) {
echo "string '" . $str . "' contains word '" . $word . "'\n";
} else {
echo "string '" . $str . "' does not contain word '" . $word . "'\n" ;
}
}
$a = 'How are you?';
test($a, 'are');
test($a, 'ar');
test($a, 'hare');
?>
Ein Lauf gibt
$ php -f test.php
string 'How are you?' contains word 'are'
string 'How are you?' does not contain word 'ar'
string 'How are you?' does not contain word 'hare'
Hinweis: Hier meinen wir nicht Wort für jede Folge von Symbolen.
Eine praktische Definition von Wort ist in dem Sinne die PCRE-Engine für reguläre Ausdrücke, bei der Wörter Teilzeichenfolgen sind, die nur aus Wortzeichen bestehen und durch Nichtwortzeichen getrennt sind.
Ein "Wort" -Zeichen ist ein beliebiger Buchstabe oder eine Ziffer oder ein Unterstrich, dh ein beliebiges Zeichen, das Teil eines Perl- "Wortes" sein kann. Die Definition von Buchstaben und Ziffern wird durch die Zeichentabellen von PCRE gesteuert und kann variieren, wenn ein länderspezifischer Abgleich stattfindet (..).