я уже писал - сплиты не подходят, нужно вычленить только регуляркой. Мой вариант работает, но искал еще варианты
Здесь и вычленяется регуляркой, сплитится уже вычленение.
Из этого вычленения также можно всё достать второй регуляркой вместо сплита. Но одной сделать не получится - текст слишком "неоднородный".
Ну или если мы гарантированно знаем, что "префикс" строки содержит "location.*:", то делать а-ля https://regex101.com/r/LCOGoA/1
Но сплитить группу всё-равно придётся. На условном php
$str = "This role may also be located in our Playa Vista, CA campus.Note: By applying to this position you will have an opportunity to share your preferred working location from the following: Mountain View, CA, USA; Atlanta, GA, USA; Boulder, CO, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA; San Francisco, CA, USA; Washington D.C., DC, USA.This role may also be located in our Playa Vista, CA campus.Note: Google’s hybrid workplace includes remote and in-office roles. By applying to this position you will have an opportunity to share your preferred working location from the following:In-office locations: San Francisco, CA, USA; Boulder, CO, USA; Los Angeles, CA, USA.Remote location(s): California, USA; Colorado, USA.Please submit your resume in English - we can only consider applications submitted in this language.Note: Google’s hybrid workplace includes remote rolesRemote location: Brazil.";$pattern = "/(location.*?:)([a-zA-Z ,;\.]*)([\.;])/";$split = array();if(preg_match_all($pattern, $str, $matches)) foreach($matches[2] as $val) $split = array_merge($split, explode(";", $val)); print_r($split);
не ясно выразился.
в исходниках:
Please submit your resume in English - we can only consider applications submitted in this language.
Note: Google’s hybrid workplace includes remote roles
А, обсуждение не читал :)
Тогда без шансов, только по словарю.
USA ни везде есть))
где нет?
на выходе должно быть так:
Mountain View, CA, USA; Atlanta, GA, USA; Boulder, CO, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA; San Francisco, CA, USA; Washington D.C., DC, USA;
San Francisco, CA, USA; Boulder, CO, USA; Los Angeles, CA, USA; California, USA; Colorado, USA
https://regex101.com/r/mbL8FS/1
чем вас sqlite с индексом не устроил не понятно, уже бы запустили и всё работало. Если надо просто поместите бд файл в память и всё будет работать еще быстрее.
B-Tree и при этом хранить в памяти?
Тогда уж redis.
Ну (раз уж id известные и просто числовые) тогда сделайте не один файл, а (например) 1000. По принципу в первом с id от 0 до 1000, во втором от 1001 до 2000 и т.п. Ну и обращаться к нужному в зависимости от диапазона.
И вот мы начали создавать собственный unordered_map/hashtable :)
php память так забьется
JSON в вашем случае вполне приемлемый вариант. Просто вы не умеете его готовить. Вкусный рецепт здесь.
json нет. файл будет 50-100мб. нужно именно искать в бинарном файле.
if ( strlen($data) == 2 ) { $int = unpack( 'cid/ccount', $data ); $name = unpack( 'a*', fread( $handle, $int['count'] ) ); $persons[] = array( $int['id'], $name ); }
Это и есть ваш поиск, просто добавьте в него
if ($int['id'] == SEARCH_ID ) {...}
но делать так (я об алгоритме в целом) разумеется не надо. Здесь у вас реализован обычный линейный поиск O(n), то есть, по сути - это худшее решение из всех возможных.
я вот до сих пор не понимаю почему коннект проходит на порт?
Потому что соединение можно повесить и на 80/443 порт и замаскировать трафик под http(s).
Поэтому сначала трафик анализируется на наличие неких ключевых признаков, а потом скорость его обмена режется до нулевых значений. Нынешние версии GFW умеют ловить даже SS-rust + Obfs4.
Да там есть 0.5-1% ложноположительных сработок, но кого они волнуют? Делается, кстати, очень примитивным способом.
We worked with other researchers to discover that the current GFW utilizes a number of different rules to identify fully encrypted protocols like Shadowsocks, VMesss, and Obfs4. One of these rules takes advantage of the fact that the ratio of 0 bit to 1 bit in these encrypted flows is close to 1:1.
Поэтому теперь разработчики добавили случайное количество 0/1 и пока обходят блокировку. Вопрос всё тот же "надолго ли"?