Erwägen:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Angenommen, ich habe den obigen Code. Wie kann ich die Anweisung if ($a contains 'are')
richtig schreiben?
Sie können die Funktion strpos()
verwenden, um das Vorkommen einer Zeichenfolge in einer anderen zu ermitteln:
$a = 'How are you?';
if (strpos($a, 'are') !== false) {
echo 'true';
}
Beachten Sie, dass die Verwendung von !== false
absichtlich ist (weder != false
noch === true
wird funktionieren); strpos()
gibt entweder den Offset zurück, an dem die Nadelkette im Heuhaufen beginnt, oder den booleschen Wert false
, wenn die Nadel nicht gefunden wird. Da 0 ein gültiger Offset ist und 0 "falsey" ist, können wir keine einfacheren Konstrukte wie !strpos($a, 'are')
verwenden.
Sie können reguläre Ausdrücke verwenden. Wie von anderen Benutzern erwähnt, ist dies für die Wortübereinstimmung besser als strpos
. Für Zeichenfolgen wie z. B. fare, care, stare usw. wird ebenfalls true zurückgegeben Wortgrenzen.
Eine einfache Übereinstimmung für are könnte etwa so aussehen:
_$a = 'How are you?';
if (preg_match('/\bare\b/', $a)) {
echo 'true';
}
_
Auf der Performanceseite ist strpos
ungefähr dreimal schneller und wenn ich eine Million Vergleiche gleichzeitig gemacht habe, hat es preg_match
1,5 Sekunden gedauert, um fertig zu werden und für strpos
Es dauerte 0,5 Sekunden.
Bearbeiten: Um einen beliebigen Teil der Zeichenfolge zu durchsuchen, nicht nur Word für Word, 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';
}
_
Das i
am Ende des regulären Ausdrucks ändert den regulären Ausdruck so, dass die Groß- und Kleinschreibung nicht berücksichtigt wird. Wenn Sie dies nicht möchten, können Sie es weglassen.
Dies kann in einigen Fällen recht problematisch sein, da die $ -Suchzeichenfolge in keiner Weise bereinigt wird. Ich meine, in einigen Fällen wird die Prüfung möglicherweise nicht bestanden, als ob _$search
_ eine Benutzereingabe ist, die sie hinzufügen können Zeichenfolge, die sich wie ein anderer regulärer Ausdruck verhält ...
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 (einschließlich 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 ein kleines Hilfsprogramm, das in solchen Situationen nützlich ist
// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
return strpos($haystack, $needle) !== false;
}
Während die meisten dieser Antworten Ihnen sagen, ob eine Teilzeichenfolge in Ihrer Zeichenfolge enthalten ist, ist dies normalerweise nicht der Fall, wenn Sie nach einem bestimmten Wort suchen. und kein Teilstring .
Was ist der Unterschied? Teilstrings können mit anderen Worten auftreten:
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 weist nicht dieselben oben genannten Fehlalarme auf, sondern hat einige eigene Edge-Fälle. Wortgrenzen stimmen mit Nicht-Wort-Zeichen (\W
) überein, bei denen es sich um alles handelt, was nicht a-z
, A-Z
, 0-9
oder _
ist. . Das bedeutet, dass Ziffern und Unterstriche als Word-Zeichen gezählt werden und solche Szenarien fehlschlagen:
Wenn Sie etwas genaueres wollen, müssen Sie mit der Syntaxanalyse in englischer Sprache beginnen, und das ist eine ziemlich große Menge an Würmern (und setzt die ordnungsgemäße Verwendung der Syntax voraus, die nicht immer gegeben ist).
Um festzustellen, ob eine Zeichenfolge eine andere Zeichenfolge enthält, können Sie die Funktion PHP 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";
}
?>
ACHTUNG:
Befindet sich die gesuchte Nadel am Anfang des Heuhaufens, gibt sie die Position 0 zurück. Wenn Sie einen ==
-Vergleich durchführen, der nicht funktioniert, müssen Sie einen ===
durchführen.
Ein ==
-Zeichen ist ein Vergleich und prüft, ob die Variable/Ausdruck/Konstante links den gleichen Wert wie die Variable/Ausdruck/Konstante rechts hat.
Ein ===
-Zeichen ist ein Vergleich, um festzustellen, ob zwei Variablen/Ausdrücke/Konstanten gleich sind. AND
haben den gleichen Typ - d. H. Beide sind Zeichenfolgen oder beide sind ganze Zahlen.
<?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.";
}
?>
Kommentare von SamGoody und Lego Stormtroopr.
Wenn Sie nach einem PHP - Algorithmus suchen, um die Suchergebnisse basierend auf der Nähe/Relevanz Ranking mehrerer Wörter zu ordnen, können Sie hier schnell und einfach Suchergebnisse mit PHP:
Probleme mit den anderen booleschen Suchmethoden wie strpos()
, preg_match()
, strstr()
oder stristr()
PHP-Methode basierend auf Vector Space Model und tf-idf (Begriff Häufigkeit - umgekehrte Häufigkeit von Dokumenten):
Es hört sich schwierig an, ist aber überraschend einfach.
Wenn wir nach mehreren Wörtern in einer Zeichenfolge suchen möchten, besteht das Hauptproblem darin, wie wir jedem einzelnen ein Gewicht zuweisen.
Wenn wir die Begriffe in einem String danach gewichten könnten, wie repräsentativ sie für den gesamten String sind, könnten wir unsere Ergebnisse nach denjenigen ordnen, die am besten zu der 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;
}
CASE 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
)
CASE 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>';
RESULTS
Array
(
[1] => 0.54248125036058
[3] => 0.21699250014423
)
CASE 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>';
RESULTS
Array
(
[3] => 0.6813781191217
[1] => 0.54248125036058
)
Es gibt viele Verbesserungen, aber das Modell bietet eine Möglichkeit, gute Ergebnisse aus natürlichen Abfragen zu erhalten, für die es keine booleschen Operatoren wie strpos()
, preg_match()
, strstr()
oder stristr()
gibt.
NOTA BENE
Optionale Beseitigung der Redundanz vor der Suche nach Wörtern
dadurch wird die Indexgröße reduziert und der Speicherbedarf verringert
weniger Festplatten-E/A
schnellere Indizierung und damit schnellere Suche.
1. Normalisierung
2. Stopword Elimination
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 Entsprechungen
Das Verringern von numerischen Werten durch Verringern der Genauigkeit ist eine andere Möglichkeit, den Text zu normalisieren.
RESOURCES
Verwenden Sie die case-insensitive Zuordnung mit stripos()
:
if (stripos($string,$stringToSearch) !== false) {
echo 'true';
}
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, vermeidet aber die Vergleichsprobleme.
Eine andere Möglichkeit ist die Verwendung der Funktion strstr () . So etwas wie:
if (strlen(strstr($haystack,$needle))>0) {
// Needle Found
}
Beachten Sie: Die Funktion strstr () unterscheidet zwischen Groß- und Kleinschreibung. Verwenden Sie für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung die Funktion stristr () .
Ich bin ein bisschen beeindruckt, dass keine der Antworten hier, die strpos
, strstr
und ähnliche Funktionen verwendet haben, bereits Multibyte String Functions erwähnt hat (08.05.2015).
Grundsätzlich gilt: Wenn Sie Probleme haben, Wörter mit sprachspezifischen Zeichen zu finden, z. B. Deutsch, Französisch, Portugiesisch, Spanisch usw. (z. B .: ä , é , ô , ç , º , ñ ), möchten Sie den Funktionen möglicherweise _mb_
_ voranstellen. Daher würde die akzeptierte Antwort stattdessen mb_strpos
oder mb_stripos
(für Übereinstimmungen ohne Berücksichtigung der Groß-/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 vorliegen, können Sie die Funktionen _mb_
_ verwenden.
Ein guter Artikel, um zu verstehen, warum Das absolute Minimum, das jeder Softwareentwickler unbedingt und unbedingt über Unicode und Zeichensätze wissen muss (keine Ausreden!) von Joel Spolsky.
if (preg_match('/(are)/', $a)) {
echo 'true';
}
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
Ermittelt die Position des ersten Auftretens einer Teilzeichenfolge, bei der die Groß- und Kleinschreibung beachtet wird.stripos
Ermittelt die Position des ersten Auftretens einer Teilzeichenfolge, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird.myFunction($haystack, $needle) === FALSE ? FALSE : TRUE
stellt sicher, dass myFunction
immer einen Booleschen Wert zurückgibt und ein unerwartetes Verhalten behebt, wenn der Index der Teilzeichenfolge 0 ist.$caseSensitive ? A : B
wählt entweder strpos
oder stripos
, um die Arbeit auszuführen, 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 auch und ist von keiner anderen Funktion abhängig. Es wird nur die native PHP Zeichenfolgenmanipulation 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 Funktion strstr
verwenden:
$haystack = "I know programming";
$needle = "know";
$flag = strstr($haystack, $needle);
if ($flag){
echo "true";
}
Ohne eingebaute 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 für eine eigene Lösung. Ohne Verwendung von regulärer Ausdruck engine:
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";
In den obigen Beispielen enthalten sowohl $a
als auch $b
$c
, aber Sie möchten möglicherweise, dass Ihre Funktion Ihnen mitteilt, dass nur $a
$c
enthält.
Eine andere Möglichkeit, das Vorkommen eines Wortes in einer Zeichenfolge mit strstr () und stristr () zu ermitteln, ist wie folgt:
<?php
$a = 'How are you?';
if (strstr($a,'are')) // Case sensitive
echo 'true';
if (stristr($a,'are')) // Case insensitive
echo 'true';
?>
Um ein "Wort" zu finden, anstatt eine Reihe von Buchstaben zu verwenden, die tatsächlich Teil eines anderen Wortes sein könnten, ist Folgendes eine gute Lösung.
$string = 'How are you?';
$array = explode(" ", $string);
if (in_array('are', $array) ) {
echo 'Found the Word';
}
Dies kann auf drei verschiedene Arten geschehen:
$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 Kurzhandversion
$result = false!==strpos($a, 'are');
Vielleicht könnten Sie so etwas verwenden:
<?php
findWord('Test all OK');
function findWord($text) {
if (strstr($text, 'ok')) {
echo 'Found a Word';
}
else
{
echo 'Did not find a Word';
}
}
?>
Sie sollten das Format "Groß-/Kleinschreibung nicht beachten" verwenden. Wenn der eingegebene Wert also small
oder caps
lautet, spielt dies keine Rolle.
<?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 Groß-/Kleinschreibung zu berücksichtigen.
Viele Antworten, die substr_count
verwenden, prüfen, ob das Ergebnis _>0
_ ist. Aber da die if
-Anweisung Null als dasselbe wie false betrachtet, können Sie diese Prüfung vermeiden und direkt schreiben:
_if (substr_count($a, 'are')) {
_
Um zu überprüfen, ob nicht vorhanden ist, fügen Sie den Operator _!
_ hinzu:
_if (!substr_count($a, 'are')) {
_
Verwenden Sie preg_match()
nicht, wenn Sie nur prüfen möchten, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist. Verwenden Sie stattdessen strpos()
oder strstr()
, da diese 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 beispielsweise beim Versenden von E-Mails Spam zu vermeiden.
Die Strpos-Funktion funktioniert einwandfrei, aber wenn Sie case-insensitive
ausführen möchten, um nach einem Wort in einem Absatz zu suchen, können Sie die stripos
-Funktion von PHP
verwenden.
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 einer Teilzeichenfolge, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird.
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 als Indexwert 0 zurückgeben kann. Wenn Sie ternäre Operatoren mögen, sollten Sie Folgendes in Betracht ziehen (ich gebe es zu, scheint ein wenig rückwärts):
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 ist nicht für jede Zeichenfolge das Wort gemeint.
Eine praktische Definition von Word ist das PCRE-Modul für reguläre Ausdrücke, bei dem Wörter Teilzeichenfolgen sind, die nur aus Word-Zeichen bestehen und durch Nicht-Word-Zeichen getrennt sind.
Ein "Word" -Zeichen ist ein Buchstabe oder eine Ziffer oder ein Unterstrich, dh ein beliebiges Zeichen, das Teil eines Perl "Word" sein kann. Die Definition von Buchstaben und Ziffern wird von den PCRE-Zeichentabellen gesteuert und kann variieren, wenn ein länderspezifischer Abgleich stattfindet (..).
Eine Zeichenfolge kann mit der folgenden Funktion überprüft werden:
function either_String_existor_not($str, $character) {
if (strpos($str, $character) !== false) {
return true;
}
return false;
}
Eine andere Lösung für eine bestimmte Zeichenfolge:
$subject = 'How are you?';
$pattern = '/are/';
preg_match($pattern, $subject, $match);
if ($match[0] == 'are') {
echo true;
}
Sie können auch die Funktion strpos()
verwenden.
Verwenden:
$text = 'This is a test';
echo substr_count($text, 'is'); // 2
// So if you want to check if is exists in the text just put
// in a condition like this:
if (substr_count($text, 'is') > 0) {
echo "is exists";
}
Eine einfachere Option:
return ( ! empty($a) && strpos($a, 'are'))? true : false;
Ich denke, dass eine gute Idee ist, mb_stpos
zu verwenden:
$haystack = 'How are you?';
$needle = 'are';
if (mb_strpos($haystack, $needle) !== false) {
echo 'true';
}
Weil diese Lösung Groß- und Kleinschreibung beachten und sicher für alle Unicode-Zeichen ist.
Sie können es aber auch so machen ( sauch Antwort war noch nicht ):
if (count(explode($needle, $haystack)) > 1) {
echo 'true';
}
Diese Lösung ist auch Groß- und Kleinschreibung beachten und sicher für Unicode-Zeichen.
Zusätzlich können Sie verwenden Sie nicht die Negation im Ausdruck, was die Lesbarkeit des Codes erhöht.
Hier ist eine andere Lösung mit Funktion:
function isContainsStr($haystack, $needle) {
return count(explode($needle, $haystack)) > 1;
}
if (isContainsStr($haystack, $needle)) {
echo 'true';
}
Verwenden:
$a = 'How are you?';
if (mb_strpos($a, 'are')) {
echo 'true';
}
Es führt eine multibyte-sichere strpos () -Operation aus.
Sie können auch die integrierten Funktionen strchr()
und strrchr()
und die Erweiterungen für Multibyte-Strings mb_strchr()
und mb_strrchr()
verwenden. Diese Funktionen geben Teile von Strings und FALSE
zurück, wenn nichts gefunden wird.
strchr()
- Finde das erste Vorkommen einer Zeichenkette (ist ein Alias von strstr()
).strrchr()
- Finde das letzte Vorkommen eines Zeichens in einer Zeichenkette.