说我有以下情况:
$string1 = 'This is my string with the city New York in';
$string2 = 'This is my string with the city Los Angeles in';
的MySQL-DB:
id|city
0|San Diego
1|Memphis
2|Los Angeles
3|Budapest
4|New York
我该如何处理整个字符串 - 不分割它 - 并检查城市中的任何值是否出现在任何字符串中?
我收到了大量字符串,其中包含的信息比上述更多。
答案 0 :(得分:1)
如果你是用PHP做的话。
一种方法是将城市查询为数组。然后使用strpos迭代数组,看看你的字符串中是否包含城市,例如
foreach($city in arrayOfCities)
{
if(strpos($string1, $city) !== false)
{
//city found in string do something
}
}
这可能不是确切的代码,但strpos可行:http://www.php.net/manual/en/function.strpos.php
答案 1 :(得分:1)
在MySQL中你可以这样做:
SELECT id, city
FROM myTable
WHERE INSTR('This is my string with the city New York in', city) > 0
这样的名字会找到名字,即使它们是一个单词的一部分,所以它会在“圣保罗的命名法”中找到Nome
。不好的例子,但我能想到的最好:Nome
匹配,因为它在nomenclature
中找到。要避免这些类型的匹配,需要使用正则表达式:
SELECT id, city
FROM myTable
WHERE 'This is my string with the city New York in'
RLIKE CONCAT('(^|[^[:alpha:]])', city, '($|[^[:alpha:]])')
正则表达式(连接后)会读取,例如:
(^|[^[:alpha:]])New York($|[^[:alpha:]])
...表示:匹配字符串或的开头是非字母字符,然后是值“New York”,然后是字符串或一个非字母的字符。简而言之,它只能找到整个单词。
答案 2 :(得分:0)
您可以在php和mysql中使用正则表达式。
对于mySQL,您可以使用REGEXP operator
在php中,您可以使用preg_match
正则表达式将是
".*" + city + ".*"
答案 3 :(得分:0)
我会尝试2件事,看看哪个是fasets \效果最好根据我做的其他事情
将所有城市implode()放入管道(|)分隔列表并使用 在preg匹配中,我循环反对字符串。
在while循环中从db中提取城市,并使用strpos()检查字符串中是否存在。
答案 4 :(得分:0)
WHERE $str1 LIKE CONCAT('%', city, '%') OR $str2 LIKE CONCAT(...) ...
ps:请记住,$str1
应该被正确转义或用作预备语句参数。